0

アプリケーションごとに必要なMongoClientのインスタンスは1つだけなので、便宜上、このメソッドを使用してHttpServletを拡張しました。

DB getDB(String dbName) throws Exception {
    MongoClient m = (MongoClient)getServletContext().getAttribute("mongo");
    if(m == null) {
        m = new MongoClient();
        getServletContext().setAttribute("mongo",m);
    }
    return m.getDB(dbName);
}

このコードを実行すると、問題なく動作し、接続して必要な作業を実行しますが、この特定のサーブレットを実行するたびに、mongodbへの新しい接続が継続的に開かれるようです。

1月26日土曜日21:31:42[initandlisten]接続が127.0.0.1:46860#1から受け入れられました(1つの接続が現在開いています)
1月26日土曜日21:31:53[initandlisten]接続が127.0.0.1:46861#2から受け入れられました(2つの接続が現在開いています)
1月26日土曜日21:32:00[initandlisten]接続が127.0.0.1:46863#3から受け入れられました(3つの接続が現在開いています)

このページで私はこれを行っています:

DB db = getDB("foo");
col = db.getCollection("bar");

次に、単純なクエリを実行します。なぜ私がこれほど多くの新しい接続を取得しているのか誰かが説明できますか?また、私はこのMongo.Holderクラスを見ました。これは私がしていることを行うための好ましい方法ですか?

ありがとう!

4

2 に答える 2

1

MongoDB Javaドライバーは接続プールを実装し、デフォルトで10個の接続を維持します。プールはドライバーによって内部的に管理されます。サーブレットコンテナからMongoサーバーへの接続が10を超えないようにする必要があります。これらのデフォルト設定を変更したい場合は、MongoOptionsをチェックしてください。

于 2013-01-27T09:26:53.933 に答える
0

接続プールのデフォルトの最大サイズは、MongoClientOptionsで10から100に増加しました。これについては、詳細なJavadoc (http://api.mongodb.org/java/current/com/mongodb/MongoClientOptions.html#getConnectionsPerHost())に記載されています。

MongoOptionsを使用している場合、デフォルトは10のままです。

于 2013-01-29T21:18:54.603 に答える