2014-11-13 20 views
5

Sto provando a progettare una classe di connessione Mongo Db in cui sto mantenendo MongoClient come statico.Chiusura connessione Java MongoDB

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

La mia applicazione web intero utilizza il metodo di cui sopra per la connessione a Mongo come segue:

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

Dopo aver eseguito le operazioni di DB non ho mai chiamo la stretta connessione per MongoClient. La classe di connessione restituirebbe sempre la stessa istanza di MongoClient che non è mai chiusa. L'unica cosa che chiudo sono i cursori.

  • È necessario chiudere il MongoClient ogni volta che si interroga il database? Il mio progetto sopra è valido?

risposta

15

Si dovrebbe non chiudere il MongoClient ogni volta che si esegue una query del database. MongoClient mantiene un pool di connessioni, che è relativamente costoso da configurare, quindi ti consigliamo di riutilizzare l'istanza di MongoClient per tutta la durata della tua applicazione web.

Un paio di altre cose da sottolineare:

  • C'è una race condition nel metodo connectToMongo. È necessario sincronizzare l'accesso a quel metodo per garantire che venga creata al massimo una sola istanza di MongoClient.
  • Se si esegue nuovamente la distribuzione dell'applicazione Web senza aver prima riavviato il server delle applicazioni, è necessario assicurarsi che MongoClient sia chiuso quando l'applicazione Web viene arrestata. Puoi farlo, ad esempio, con un ServletContextListener.
+0

Questo ha senso .... Grazie ragazzi! – ecnoir