【问题标题】:Closing MongoDB Java Connection关闭 MongoDB Java 连接
【发布时间】:2015-01-10 22:04:00
【问题描述】:

我正在尝试设计一个 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 的关闭连接。连接类将始终返回从不关闭的同一个 MongoClient 实例。我唯一关闭的是游标。

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

【问题讨论】:

    标签: java mongodb mongodb-query mongodb-java


    【解决方案1】:

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

    还有几点需要指出:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多