2014-11-13 96 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