MongoClient a un pool de connexion interne. Le nombre maximum de connexions peut être configuré (la valeur par défaut est 100). Vous pouvez le définir en utilisant MongoClientOptions
comme ceci :
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
Et donnez ensuite ces options à MongoClient (vérifié dans Mongo Java API v2.11.1). Les connexions dans le pool sont maintenues ouvertes (l'ouverture et la fermeture de la connexion sont généralement une opération coûteuse) afin qu'elles puissent être réutilisées ultérieurement.
Je refactoriserais également votre singleton client MongoDB en utilisant enum
par exemple pour éviter de mettre synchronized
sur cette méthode.
Voici un croquis de ce que je veux dire :
public enum MongoDB {
INSTANCE;
private static final String MONGO_DB_HOST = "some.mongohost.com";
private Mongo mongo;
private DB someDB;
MongoDB() {
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.readPreference(ReadPreference.secondaryPreferred())
.build();
try {
mongo = new MongoClient(MONGO_DB_HOST, options);
} catch (UnknownHostException e) {
e.printStackTrace();
}
someDB = mongo.getDB("someDB");
//authenticate if needed
//boolean auth = someDB.authenticate("username", "password".toCharArray());
//if(!auth){
// System.out.println("Error Connecting To DB");
//}
}
public DB getSomeDB() {
return someDB;
}
//call it on your shutdown hook for example
public void close(){
mongo.close();
}
}
Ensuite, vous pouvez accéder à votre base de données via
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();