2014-11-13 98 views
5

我想设计一个Mongo Db连接类,我将MongoClient作为静态主体。关闭MongoDB Java连接

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应用程序使用上述方法来连接到蒙戈如下:

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

执行数据库操作后我从来没有要求MongoClient的密切联系。连接类将始终返回从未关闭的同一个MongoClient实例。我只关闭游标。

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

回答

15

你绝对不应该关闭每次查询数据库时MongoClient。 MongoClient维护一个连接池,这个连接池的设置相对昂贵,所以你需要在Web应用程序的整个生命周期中重新使用MongoClient实例。

一对夫妇的其他事情指出:

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

这很有道理....谢谢你们! – ecnoir