No aplicativo, um único
MongoClient
objeto com um número necessário de conexões, usando o pooling de conexões , funcionará neste caso. O valor padrão do pool de conexões de 100
, e pode ser modificado (ou configurado) conforme necessário. O objeto cliente mongo pode ser criado no início do aplicativo e é fechado somente quando o aplicativo é fechado. Isso economiza os recursos relacionados à criação de uma conexão com os objetos do cliente mongo em cada classe de acesso à coleção.
O mesmo objeto de cliente mongo pode ser usado em todo o aplicativo. Um singleton class (que mantém uma instância do objeto cliente mongo) pode ser acessada por qualquer outro objeto no aplicativo que precise de uma conexão com o servidor de banco de dados MongoDB.
O que é pool de conexões?
Código de exemplo:
/*
* 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();
// ...
}
Cliente Mongo
MongoClient
objeto é usado para se conectar ao servidor MongoDB, obter acesso a um banco de dados usando o getDatebase()
método e trabalhar com coleções. com.mongodb.client.MongoClient
interface:Da documentação do MongoDB Java :
A instância MongoClient representa um pool de conexões com o banco de dados; você precisará apenas de uma instância da classe MongoClient, mesmo com vários threads.
O código a seguir cria um objeto de conexão do cliente MongoDB com configurações padrão, como o host ("localhost") e a porta (
27017
), pool de conexões, etc., e se conecta a uma instância do MongoDB e obtém acesso ao testDB
base de dados. MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Configurações do Mongo Client:
Você pode especificar explicitamente outras configurações com o
MongoClientSettings
para controlar o comportamento de um MongoClient
. MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
As
ConnectionPoolSettings
object especifica todas as configurações relacionadas ao conjunto de conexões com um servidor MongoDB. O aplicativo cria esse pool de conexões quando o objeto cliente é criado. ConnectionPoolSettings.Builder
é um construtor para ConnectionPoolSettings
, tem métodos para especificar as propriedades do conjunto de conexões. Por exemplo, maxSize(int maxSize)
:O número máximo de conexões permitidas (o padrão é 100
). Outros métodos incluem, minSize
, maxConnectionIdleTime
, etc Código para instanciar um
MongoClient
com configurações de pool de conexão: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());