MongoClient posiada wewnętrzną pulę połączeń. Można skonfigurować maksymalną liczbę połączeń (domyślnie 100). Możesz to ustawić za pomocą MongoClientOptions
tak:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
A następnie przekaż te opcje MongoClient (zaznaczone w Mongo Java API v2.11.1). Połączenia w puli są utrzymywane jako otwarte (otwieranie i zamykanie połączenia jest zwykle kosztowną operacją), aby można je było później ponownie wykorzystać.
Chciałbym również dokonać refaktoryzacji pojedynczego klienta MongoDB za pomocą enum
na przykład, aby uniknąć umieszczania synchronized
na tej metodzie.
Oto szkic tego, co mam na myśli:
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();
}
}
Następnie możesz uzyskać dostęp do bazy danych przez
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();