关闭MongoDB Java连接

Ecn*_*oir 5 java mongodb mongodb-java mongodb-query

我正在尝试设计一个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);    
}
Run Code Online (Sandbox Code Playgroud)

我的整个Web应用程序使用上面的方法连接到Mongo,如下所示:

db = MongoDBConnection.connectToMongo();
collection = db.getCollection("collectionName");
Run Code Online (Sandbox Code Playgroud)

执行数据库操作后,我从不为MongoClient调用close连接.连接类总是会返回相同的MongoClient实例,它永远不会关闭.我关闭的唯一内容就是游标.

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

jye*_*min 16

每次查询数据库时,绝对不应该关闭MongoClient.MongoClient维护一个连接池,设置起来相对昂贵,因此您需要在Web应用程序的整个生命周期内重用MongoClient实例.

还有几点需要指出:

  • connectToMongo方法中存在竞争条件.您需要同步对该方法的访问,以确保最多只创建一个MongoClient实例.
  • 如果在未首先重新启动应用程序服务器的情况下重新部署Web应用程序,则必须确保在Web应用程序关闭时关闭MongoClient.例如,您可以使用ServletContextListener执行此操作.