アプリケーションでは、単一のMongoClient
接続プールを使用して、必要な数の接続を持つオブジェクト 、この場合は機能します。 100
の接続プールのデフォルト値 、および必要に応じて変更(または構成)できます。
mongoクライアントオブジェクトは、アプリケーションの開始時に作成でき、アプリケーションが閉じられたときにのみ閉じられます。これにより、各コレクションアクセスクラスのmongoクライアントオブジェクトとの接続の作成に関連するリソースが節約されます。
同じmongoクライアントオブジェクトをアプリケーション全体で使用できます。 シングルトン クラス(mongoクライアントオブジェクトの1つのインスタンスを維持する)には、MongoDBデータベースサーバーへの接続を必要とするアプリケーション内の他のオブジェクトからアクセスできます。
接続プールとは何ですか?
サンプルコード:
/*
* Manages the MongoClient object and its settings like host, port, connection pool, etc.
*/
public class DBAccess {
private static MongoClient mongoClient;
private static DBAccess dbAccess;
// MongoClient with default settings
// NOTE: the code will have only one of the constructors
//private DBAccess() {
// final String connectionString = "mongodb://localhost:27017";
// this.mongoClient = MongoClients.create(connectionString);
//}
// MongoClient with custom settings.
// Private constructor, so that the class can be instantiated outside this class.
// NOTE: the code will have only one of the constructors
private DBAccess() {
MongoClientSettings settings =
MongoClientSettings.builder()
.applyToConnectionPoolSettings(builder ->
builder.maxSize(40).minSize(10))
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("localhost", 27017))))
.build();
mongoClient = MongoClients.create(settings);
}
public static MongoClient getConnection() {
if (dbAccess == null) {
dbAccess = new DBAccess();
}
return mongoClient;
}
public static void closeDatabase() {
mongoClient.close();
}
}
/*
* Class manages a collection.
*/
public class CollectionOneAccess {
public static String COLLECTION_ONE = "collection_one";
private MongoCollection<Document> collection;
public CollectionOneAccess(MongoDatabase db) {
collection = db.getCollection(COLLECTION_ONE);
}
public void printOneDocument() {
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
}
// other CRUD operations ...
}
// Usage of DBAcess and CollectionOneAccess classes:
private static final String APP_DATABASE = "abc_db";
public static void main(String [] args) {
MongoDatabase database = DBAccess.getConnection().getDatabase(APP_DATABASE);
CollectionOneAccess one = new CollectionOneAccess(database);
one.printOneDocument();
// ...
}
Mongoクライアント
MongoClient
オブジェクトは、MongoDBサーバーに接続し、getDatebase()
を使用してデータベースにアクセスするために使用されます 方法とコレクションの操作。
com.mongodb.client.MongoClient
インターフェース:
MongoClientインスタンスは、データベースへの接続のプールを表します。複数のスレッドがある場合でも、クラスMongoClientのインスタンスは1つだけ必要です。
次のコードは、ホスト( "localhost")やポート(27017
などのデフォルト設定でMongoDBクライアント接続オブジェクトを作成します )、接続プーリングなど、MongoDBインスタンスに接続し、testDB
にアクセスします。 データベース。
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Mongoクライアント設定:
MongoClientSettings
を使用して、他の設定を明示的に指定できます MongoClient
の動作を制御します 。
MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
ConnectionPoolSettings
オブジェクトは、MongoDBサーバーへの接続プールに関連するすべての設定を指定します。クライアントオブジェクトが作成されると、アプリケーションはこの接続プールを作成します。 ConnectionPoolSettings.Builder
ConnectionPoolSettings
のビルダーです 、接続プールのプロパティを指定するメソッドがあります。例:maxSize(int maxSize)
:許可される接続の最大数(デフォルトは100
)。他のメソッドには、minSize
が含まれます 、maxConnectionIdleTime
、など。
MongoClient
をインスタンス化するコード 接続プール設定あり:
MongoClientSettings settings = MongoClientSettings.builder()
.applyToConnectionPoolSettings(builder ->
builder.maxSize(20))
.build();
MongoClient mongoClient = MongoClients.create(settings);
// ...
// Verify the connection pool settings
System.out.println("Pool size: " +
settings.getConnectionPoolSettings().getMaxSize());