Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭MongoDB Java连接_Java_Mongodb_Mongodb Query_Mongodb Java - Fatal编程技术网

关闭MongoDB Java连接

关闭MongoDB Java连接,java,mongodb,mongodb-query,mongodb-java,Java,Mongodb,Mongodb Query,Mongodb Java,我正试图设计一个Mongo Db连接类,在这个类中,我将MongoClient维护为静态 private static MongoClient client = null; public static DB connectToMongo() throws Exception { if (null != client) { return client.getDB(DBNAME); } client = new MongoClient(HOST

我正试图设计一个Mongo Db连接类,在这个类中,我将MongoClient维护为静态

private static MongoClient client = null;

public static DB connectToMongo() throws Exception {
    if (null != client) {
        return client.getDB(DBNAME);
    }       
    client = new MongoClient(HOST,PORT);                
    return client.getDB(DBNAME);    
}
我的整个web应用程序使用上述方法连接到Mongo,如下所示:

db = MongoDBConnection.connectToMongo();
collection = db.getCollection("collectionName");
执行DB操作后,我从未调用MongoClient的close连接。connection类将始终返回从未关闭的MongoClient的同一个实例。我唯一关闭的是游标

  • 每次查询数据库时是否需要关闭MongoClient? 我的上述设计有效吗?

您绝对不应该每次查询数据库时都关闭MongoClient。MongoClient维护一个连接池,设置该连接池的成本相对较高,因此您需要在web应用程序的整个生命周期中重复使用MongoClient实例

还有几件事需要指出:

  • connectToMongo方法中存在竞争条件。您需要同步对该方法的访问,以确保最多创建一个MongoClient实例
  • 如果您在未重新启动应用程序服务器的情况下重新部署web应用程序,则必须确保在web应用程序关闭时关闭MongoClient。例如,您可以使用ServletContextListener来实现这一点