MongoClient har intern anslutningspool. Maximalt antal anslutningar kan konfigureras (standard är 100). Du kan ställa in det genom att använda MongoClientOptions
så här:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
Och ge sedan dessa alternativ till MongoClient (kontrollerade det i Mongo Java API v2.11.1). Anslutningar i poolen hålls öppna (att öppna och stänga anslutningen är vanligtvis en dyr operation) så att de kan återanvändas senare.
Jag skulle också refaktorisera din MongoDB-klientsingel med enum
till exempel för att undvika att sätta synchronized
på denna metod.
Här är en skiss på vad jag menar:
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();
}
}
Sedan kan du komma åt din databas via
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();