关闭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? 我的上述设计有效吗?

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

还有几点需要指出:

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