MongoClient má vnitřní fond připojení. Lze konfigurovat maximální počet připojení (výchozí je 100). Můžete to nastavit pomocí MongoClientOptions
takhle:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
A pak tyto možnosti dejte MongoClientovi (zkontrolováno v Mongo Java API v2.11.1). Připojení ve fondu jsou udržována otevřená (otevření a uzavření připojení je obvykle nákladná operace), takže je lze později znovu použít.
Také bych refaktoroval váš MongoDB klient singleton pomocí enum
například abyste se vyhnuli umístění synchronized
na této metodě.
Zde je náčrt toho, co mám na mysli:
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();
}
}
Poté můžete přistupovat ke své databázi pomocí
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();