2014-11-13 19 views
5

MongoClient'i statik olarak sürdürdüğüm bir Mongo Db bağlantı sınıfı tasarlamaya çalışıyorum.MongoDB Java Bağlantısını Kapatma

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);  
} 

Benim bütün web uygulaması aşağıdaki şekilde Mongo bağlanmak için yukarıdaki yöntem kullanır:

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

DB işlemleri gerçekleştirdikten sonra ben MongoClient için yakın bağlantıyı hiç aramıyorsun. Bağlantı sınıfı her zaman kapalı olan aynı MongoClient örneğini döndürür. Kapattığım tek şey imleçlerdir.

  • Veritabanını her sorguladığımız zaman MongoClient'i kapatmak gerekiyor mu? Yukarıdaki tasarımım geçerli mi?

cevap

15

Kesinlikle MongoClient veritabanını sorgulamak her zaman kapatmak olmamalıdır. MongoClient, kurulum için nispeten pahalı olan bir bağlantı havuzunu korur, bu nedenle MongoClient örneğini web uygulamanızın kullanım ömrü boyunca yeniden kullanmak isteyeceksiniz.

diğer şeylerin bir çift işaret etmek:

  • connectToMongo yönteminde bir yarış durumu vardır. MongoClient'in en fazla bir örneğinin oluşturulduğundan emin olmak için bu yönteme erişimi senkronize etmeniz gerekir.
  • Web sunucunuzu uygulama sunucunuzu ilk kez yeniden başlatmadan yeniden dağıtırsanız, web uygulamanız kapatıldığında MongoClient'in kapalı olduğundan emin olmalısınız. Bunu, örneğin bir ServletContextListener ile yapabilirsiniz.
+0

Bu mantıklı .... Teşekkürler beyler! – ecnoir