Javaで実行するWebアプリケーション用にmongoDBをセットアップする適切な方法に関するアドバイスを探しています。mongoDBチュートリアルから、Mongoクラスのインスタンスは1つだけにする必要があることを理解しています。
Mongoクラスは、スレッドセーフであり、スレッド間で共有されるように設計されています。通常、特定のDBクラスターに対してインスタンスを1つだけ作成し、アプリ全体で使用します。
だから私はこれのためのシングルトンプロバイダーを持っています(私は注射にguiceを使用しています)
@Singleton
public class MongoProvider implements Provider<Mongo> {
private Mongo mongo;
public Mongo get() {
if (mongo == null)
mongo = new Mongo("localhost", 27017);
return mongo;
}
}
また、Webアプリでmongoを使用する必要がある場合は常に、プロバイダーを挿入して同じmongoのインスタンスを取得します。
public class MyService {
private Provider<Mongo> mongoProvider;
@Inject
private MyService(Provider<Mongo> mongoProvider) {
this.mongoProvider = mongoProvider;
}
public void execute() {
DB db = mongoProvider.get().getDB("mydatabase");
DBCollection coll = db.getCollection("mycollection");
// Do stuff in collection
...
}
}
私が奇妙だと思うのは、データベースにアクセスするたびに、mongoから次のようなログを取得することです。
[initandlisten] 192.168.1.33:54297#15から受け入れられた接続
[initandlisten] 192.168.1.33:54299#16から受け入れられた接続
これまでのところ問題はありませんが、それが良い習慣であり、受け入れられる接続数が多すぎても問題が発生しないのではないかと思います。
- また、アプリ全体でDBオブジェクトのインスタンスを1つだけ持つ必要がありますか?
- しばらくすると自動的に接続を閉じるように、MongoDBを別の方法で構成する必要がありますか?または、手動で接続を閉じる必要がありますか?Mongoでclose()メソッドを使用する方法について読んだことがありますが、いつ呼び出すか、呼び出すかどうかはわかりません。
アドバイスありがとうございます。