Mongodb MonoDb在集合上的每个操作都创建连接

Mongodb MonoDb在集合上的每个操作都创建连接,mongodb,ejb,mongodb-java,nosql,Mongodb,Ejb,Mongodb Java,Nosql,我使用的是mongodb java驱动程序,除此之外没有其他功能。我创建了连接Mongo的singleten EJB @Singleton public class MongoConnection { private DB db = null; private MongoClient mongoClient = null; @PostConstruct public void init() { try { mongoClient = new MongoClient("localh

我使用的是mongodb java驱动程序,除此之外没有其他功能。我创建了连接Mongo的singleten EJB

@Singleton
public class MongoConnection {

private DB db = null;
private MongoClient mongoClient = null;

@PostConstruct
public void init() {
  try {
    mongoClient = new MongoClient("localhost", 27017);
    db = mongoClient.getDB("mydb");
  } catch (UnknownHostException e) {
    e.printStackTrace();
}
}

public MongoConnection() {
}

public DB getDb() {
  return db;
}
public DBCollection getCollectionInDatabase(String collection) {
  DBCollection coll;
  coll = db.getCollection(collection);
  return coll;
}
}
我在ApplicationScopedBean(JSF)中得到了这个ejb(只是为了确保,我将只有一个DB连接实例)

然后,在请求范围的bean中,我从db获取数据

@Named("mongoBean")
@SessionScoped
public class MongoBean implements Serializable {

private static final long serialVersionUID = 1L;
@Inject MongoApplicationScope mongoAccess;
public void mongoDzialanie() {
DBCollection coll = mongoAccess.getMu().getDb().getCollection("oko"); //at this step everything is correct  
System.out.println(coll.getCount()); //new connection is created text from mongoDB console -> connection accepted from 127.0.0.1:57700 #2 (2 connections now open)

}
为什么即使我有相同的“db”对象实例,我也不能在不创建新连接的情况下获取数据,为什么我不能共享此连接,因为这是由于池的缘故?
}

每次使用集合时,MongoDB驱动程序都会在后台打开新连接。司机决定什么时候开一家新的。我相信这取决于司机的执行情况

通过设置poolSize值(Node.JS MongoDb driver的默认值为5),可以控制打开的最大连接数。对于Java或其他语言,这可能有所不同。检查您的文档

如果要有多个db对象,则每个对象都有自己的连接池。在我的例子中,我有mainDb和logsDb。每人有10个游泳池。因此,最多将打开20个并发连接


最后,如果您使用的是node.js驱动程序,请确保将数字作为值传递,而不是字符串(即poolSize:10)。这将为您节省数小时/数天的故障排除时间:)

我看到Node.Js MongoDb驱动程序也有同样的行为。你有没有发现为什么会发生这种情况?我刚刚通过解决一个类似的问题找到了你问题的答案。
@Named("mongoBean")
@SessionScoped
public class MongoBean implements Serializable {

private static final long serialVersionUID = 1L;
@Inject MongoApplicationScope mongoAccess;
public void mongoDzialanie() {
DBCollection coll = mongoAccess.getMu().getDb().getCollection("oko"); //at this step everything is correct  
System.out.println(coll.getCount()); //new connection is created text from mongoDB console -> connection accepted from 127.0.0.1:57700 #2 (2 connections now open)

}