MongoClient heeft een interne verbindingspool. Maximaal aantal verbindingen kan worden geconfigureerd (standaard is 100). Je kunt het instellen met MongoClientOptions
zoals dit:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
En geef deze opties vervolgens aan MongoClient (aangevinkt in Mongo Java API v2.11.1). Verbindingen in pool blijven open (verbinding openen en sluiten is meestal een dure operatie) zodat ze later opnieuw kunnen worden gebruikt.
Ik zou ook uw MongoDB-client-singleton refactoren met behulp van enum
bijvoorbeeld om te voorkomen dat synchronized
op deze methode.
Hier is een schets van wat ik bedoel:
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();
}
}
Vervolgens heeft u toegang tot uw database via
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();