MongoClient har intern forbindelsespool. Maksimalt antal forbindelser kan konfigureres (standard er 100). Du kan indstille det ved at bruge MongoClientOptions
sådan her:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
Og giv derefter disse muligheder til MongoClient (kontrollerede det i Mongo Java API v2.11.1). Forbindelser i pool holdes åbne (åbning og lukning af forbindelse er normalt en dyr operation), så de senere kan genbruges.
Jeg ville også refaktorisere din MongoDB-klient-singleton ved hjælp af enum
for at undgå at sætte synchronized
på denne metode.
Her er en skitse af, hvad jeg mener:
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();
}
}
Derefter kan du få adgang til din database via
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();