MongoClientには内部接続プールがあります。接続の最大数を構成できます(デフォルトは100)。 MongoClientOptions
を使用して設定できます このように:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
次に、これらのオプションをMongoClientに渡します(Mongo Java API v2.11.1でチェックしました)。プール内の接続は開いたままになり(接続の開閉は通常、コストのかかる操作です)、後で再利用できるようにします。
また、enum
を使用してMongoDBクライアントのシングルトンをリファクタリングします たとえば、synchronized
を回避するため この方法で。
これが私の言いたいことのスケッチです:
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();
}
}
次に、
を介してデータベースにアクセスできます。MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();