I applikationen, en enda MongoClient
objekt med ett nödvändigt antal anslutningar, med anslutningspooling , kommer att fungera i det här fallet. Standardvärdet för anslutningspoolen på 100
, och kan ändras (eller konfigureras) efter behov.
Mongo-klientobjektet kan skapas i början av applikationen och stängs endast när applikationen stängs. Detta sparar resurserna relaterade till att skapa en anslutning med mongo-klientobjekten i varje samlingsåtkomstklass.
Samma mongo-klientobjekt kan användas i hela applikationen. En singel klass (som upprätthåller en instans av mongo-klientobjektet) kan nås av vilket annat objekt som helst i applikationen som behöver en anslutning till MongoDB-databasservern.
Vad är anslutningspoolning?
Exempelkod:
/*
* 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 Client
MongoClient
objekt används för att ansluta till MongoDB-servern, få tillgång till en databas med hjälp av getDatebase()
metod och arbete med samlingar.
com.mongodb.client.MongoClient
gränssnitt:
Från MongoDB Java-dokumentationen :
MongoClient-instansen representerar en pool av anslutningar till databasen; du behöver bara en instans av klass MongoClient även med flera trådar.
Följande kod skapar ett MongoDB-klientanslutningsobjekt med standardinställningar, som värd ("localhost") och port (27017
), anslutningspoolning, etc., och ansluter till en MongoDB-instans och får tillgång till testDB
databas.
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Mongo Client Settings:
Du kan uttryckligen ange andra inställningar med MongoClientSettings
för att kontrollera beteendet hos en MongoClient
.
MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
ConnectionPoolSettings
objekt specificerar alla inställningar som hänför sig till poolen av anslutningar till en MongoDB-server. Applikationen skapar denna anslutningspool när klientobjektet skapas. ConnectionPoolSettings.Builder
är en byggare för ConnectionPoolSettings
, har metoder för att specificera anslutningspoolens egenskaper. T.ex. maxSize(int maxSize)
:Det maximala antalet tillåtna anslutningar (standard är 100
). Andra metoder inkluderar minSize
, maxConnectionIdleTime
osv.
Kod för att instansiera en MongoClient
med anslutningspoolinställningar:
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());