Dalam aplikasi, satu MongoClient
objek dengan jumlah koneksi yang diperlukan, menggunakan pengumpulan koneksi , akan bekerja dalam kasus ini. Nilai default kumpulan koneksi 100
, dan dapat dimodifikasi (atau dikonfigurasi) sesuai kebutuhan.
Objek klien mongo dapat dibuat di awal aplikasi dan ditutup hanya ketika aplikasi ditutup. Ini menghemat sumber daya yang terkait dengan membuat koneksi dengan objek klien mongo di setiap kelas akses koleksi.
Objek klien mongo yang sama dapat digunakan di seluruh aplikasi. Seorang lajang class (yang memelihara satu instance dari objek klien mongo) dapat diakses oleh objek lain dalam aplikasi yang memerlukan koneksi ke server database MongoDB.
Apa itu connection pooling?
Contoh Kode:
/*
* 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();
// ...
}
Klien Mongo
MongoClient
objek digunakan untuk terhubung ke server MongoDB, mendapatkan akses ke database menggunakan getDatebase()
metode dan bekerja dengan koleksi.
com.mongodb.client.MongoClient
antarmuka:
Dari dokumentasi MongoDB Java :
Instance MongoClient mewakili kumpulan koneksi ke database; Anda hanya memerlukan satu instance kelas MongoClient bahkan dengan banyak utas.
Kode berikut membuat objek koneksi klien MongoDB dengan pengaturan default, seperti host ("localhost") dan port (27017
), penggabungan koneksi, dll., dan terhubung ke instans MongoDB dan mendapatkan akses ke testDB
basis data.
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Setelan Klien Mongo:
Anda dapat secara eksplisit menentukan pengaturan lain dengan MongoClientSettings
untuk mengontrol perilaku MongoClient
.
MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
ConnectionPoolSettings
objek menentukan semua pengaturan yang berhubungan dengan kumpulan koneksi ke server MongoDB. Aplikasi membuat kumpulan koneksi ini saat objek klien dibuat. ConnectionPoolSettings.Builder
adalah pembuat untuk ConnectionPoolSettings
, memiliki metode untuk menentukan properti kumpulan koneksi. Mis., maxSize(int maxSize)
:Jumlah maksimum koneksi yang diizinkan (defaultnya adalah 100
). Metode lain termasuk, minSize
, maxConnectionIdleTime
, dll.
Kode untuk membuat instance MongoClient
dengan setelan kumpulan koneksi:
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());