关闭MongoDB Java连接

时间:2014-11-13 17:02:29

标签: 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,PORT);                
    return client.getDB(DBNAME);    
}

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

db = MongoDBConnection.connectToMongo();
collection = db.getCollection("collectionName");

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

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

1 个答案:

答案 0 :(得分:16)

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

要指出的其他几点:

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