MongoClient има вътрешен пул за връзки. Могат да бъдат конфигурирани максимален брой връзки (по подразбиране е 100). Можете да го зададете, като използвате MongoClientOptions
като това:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
И след това дайте тези опции на MongoClient (проверено в Mongo Java API v2.11.1). Връзките в пула се поддържат отворени (отварянето и затварянето на връзка обикновено е скъпа операция), така че да могат да бъдат използвани по-късно.
Бих също така преработил вашия MongoDB клиент singleton, използвайки enum
например, за да избегнете поставянето на synchronized
по този метод.
Ето скица на това, което имам предвид:
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();
}
}
След това можете да получите достъп до вашата база данни чрез
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();