個々の操作ごとにMongoクラスのインスタンスを作成しています。各インスタンスは少なくとも1つの接続(デフォルトでは10)を作成して保持するため、これは機能しません。これらの接続は、Java GCがMongoインスタンスをクリーンアップするか、close()を呼び出した場合にのみ削除されます。
>問題は、どちらの場合も、単一のスレッドを使用していても、閉じるよりも速く作成していることです。これにより、急いで最大数の接続が使い果たされます。正しい修正は、シングルトンパターンを使用して1つのMongoインスタンスを維持することです(Mongo.Holderはこのための機能を提供します、Mongo.Holder.connect(..)を試してください)。簡単な「修正」は、マシンのファイル記述子の制限を増やして、接続の最大数を大幅に増やすことですが、最終的には同じ制限に達する可能性があります。 (シェル内で)を使用して現在の最大値を確認できます:
db.serverStatus().connections
TL; DR:Mongoインスタンスをシングルトンとして扱い、それらを可能な限り長寿命にすることで、あなたは黄金になります。遅延して作成されたインスタンスを返す静的メソッドgetInstance()を使用してMongoFactoryを実装すると、うまく機能します。頑張ってください。