Browse Source

DATAMONGO-1968 - Polishing.

Rename MongoDbFactoryBase to MongoDbFactorySupport. Add constructor to MongoTemplate accepting the new MongoClient type. Extend Javadoc. Switch tests to use the new MongoTemplate constructor.

Original pull request: #557.
pull/559/merge
Mark Paluch 8 years ago
parent
commit
85aef4836d
  1. 3
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoClientConfiguration.java
  2. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java
  3. 58
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoDbFactorySupport.java
  4. 13
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  5. 14
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoClientDbFactory.java
  6. 18
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoDbFactory.java
  7. 8
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ClientSessionTests.java
  8. 29
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JsonSchemaQueryTests.java
  9. 11
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java
  10. 4
      src/main/asciidoc/reference/mongodb.adoc

3
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoClientConfiguration.java

@ -33,8 +33,9 @@ import com.mongodb.client.MongoClient;
* Base class for Spring Data MongoDB configuration using JavaConfig with {@link com.mongodb.client.MongoClient}. * Base class for Spring Data MongoDB configuration using JavaConfig with {@link com.mongodb.client.MongoClient}.
* *
* @author Christoph Strobl * @author Christoph Strobl
* @see MongoConfigurationSupport
* @since 2.1 * @since 2.1
* @see MongoConfigurationSupport
* @see AbstractMongoConfiguration
*/ */
@Configuration @Configuration
public abstract class AbstractMongoClientConfiguration extends MongoConfigurationSupport { public abstract class AbstractMongoClientConfiguration extends MongoConfigurationSupport {

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java

@ -41,6 +41,7 @@ import com.mongodb.MongoClient;
* @author Christoph Strobl * @author Christoph Strobl
* @author Mark Paluch * @author Mark Paluch
* @see MongoConfigurationSupport * @see MongoConfigurationSupport
* @see AbstractMongoClientConfiguration
*/ */
@Configuration @Configuration
public abstract class AbstractMongoConfiguration extends MongoConfigurationSupport { public abstract class AbstractMongoConfiguration extends MongoConfigurationSupport {

58
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoDbFactoryBase.java → spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoDbFactorySupport.java

@ -33,21 +33,38 @@ import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
/** /**
* Common base class for usage with both {@link com.mongodb.client.MongoClients} and {@link com.mongodb.MongoClient}. * Common base class for usage with both {@link com.mongodb.client.MongoClients} and {@link com.mongodb.MongoClient}
* defining common properties such as database name and exception translator.
* <p/>
* Not intended to be used directly.
* *
* @author Christoph Strobl * @author Christoph Strobl
* @author Mark Paluch
* @param <C> Client type.
* @since 2.1 * @since 2.1
* @see SimpleMongoDbFactory
* @see SimpleMongoClientDbFactory
*/ */
abstract class MongoDbFactoryBase<T> implements MongoDbFactory { public abstract class MongoDbFactorySupport<C> implements MongoDbFactory {
private final T mongoClient; private final C mongoClient;
private final String databaseName; private final String databaseName;
private final boolean mongoInstanceCreated; private final boolean mongoInstanceCreated;
private final PersistenceExceptionTranslator exceptionTranslator; private final PersistenceExceptionTranslator exceptionTranslator;
private @Nullable WriteConcern writeConcern; private @Nullable WriteConcern writeConcern;
protected MongoDbFactoryBase(T mongoClient, String databaseName, boolean mongoInstanceCreated, /**
* Create a new {@link MongoDbFactorySupport} object given {@code mongoClient}, {@code databaseName},
* {@code mongoInstanceCreated} and {@link PersistenceExceptionTranslator}.
*
* @param mongoClient must not be {@literal null}.
* @param databaseName must not be {@literal null} or empty.
* @param mongoInstanceCreated {@literal true} if the client instance was created by a subclass of
* {@link MongoDbFactorySupport} to close the client on {@link #destroy()}.
* @param exceptionTranslator must not be {@literal null}.
*/
protected MongoDbFactorySupport(C mongoClient, String databaseName, boolean mongoInstanceCreated,
PersistenceExceptionTranslator exceptionTranslator) { PersistenceExceptionTranslator exceptionTranslator) {
Assert.notNull(mongoClient, "MongoClient must not be null!"); Assert.notNull(mongoClient, "MongoClient must not be null!");
@ -62,7 +79,7 @@ abstract class MongoDbFactoryBase<T> implements MongoDbFactory {
} }
/** /**
* Configures the {@link WriteConcern} to be used on the {@link DB} instance being created. * Configures the {@link WriteConcern} to be used on the {@link MongoDatabase} instance being created.
* *
* @param writeConcern the writeConcern to set * @param writeConcern the writeConcern to set
*/ */
@ -85,7 +102,7 @@ abstract class MongoDbFactoryBase<T> implements MongoDbFactory {
@Override @Override
public MongoDatabase getDb(String dbName) throws DataAccessException { public MongoDatabase getDb(String dbName) throws DataAccessException {
Assert.hasText(dbName, "Database name must not be empty."); Assert.hasText(dbName, "Database name must not be empty!");
MongoDatabase db = doGetMongoDatabase(dbName); MongoDatabase db = doGetMongoDatabase(dbName);
@ -96,6 +113,18 @@ abstract class MongoDbFactoryBase<T> implements MongoDbFactory {
return db.withWriteConcern(writeConcern); return db.withWriteConcern(writeConcern);
} }
/**
* Get the actual {@link MongoDatabase} from the client.
*
* @param dbName must not be {@literal null} or empty.
* @return
*/
protected abstract MongoDatabase doGetMongoDatabase(String dbName);
/*
* (non-Javadoc)
* @see org.springframework.beans.factory.DisposableBean#destroy()
*/
public void destroy() throws Exception { public void destroy() throws Exception {
if (mongoInstanceCreated) { if (mongoInstanceCreated) {
closeClient(); closeClient();
@ -115,17 +144,24 @@ abstract class MongoDbFactoryBase<T> implements MongoDbFactory {
* @see org.springframework.data.mongodb.MongoDbFactory#withSession(com.mongodb.session.Session) * @see org.springframework.data.mongodb.MongoDbFactory#withSession(com.mongodb.session.Session)
*/ */
public MongoDbFactory withSession(ClientSession session) { public MongoDbFactory withSession(ClientSession session) {
return new MongoDbFactoryBase.ClientSessionBoundMongoDbFactory(session, this); return new MongoDbFactorySupport.ClientSessionBoundMongoDbFactory(session, this);
} }
/**
* Close the client instance.
*/
protected abstract void closeClient(); protected abstract void closeClient();
protected abstract MongoDatabase doGetMongoDatabase(String dbName); /**
* @return the Mongo client object.
protected T getMongoClient() { */
protected C getMongoClient() {
return mongoClient; return mongoClient;
} }
/**
* @return the database name.
*/
protected String getDefaultDatabaseName() { protected String getDefaultDatabaseName() {
return databaseName; return databaseName;
} }
@ -205,7 +241,7 @@ abstract class MongoDbFactoryBase<T> implements MongoDbFactory {
return createProxyInstance(session, database, MongoDatabase.class); return createProxyInstance(session, database, MongoDatabase.class);
} }
private MongoCollection proxyCollection(com.mongodb.session.ClientSession session, MongoCollection collection) { private MongoCollection<?> proxyCollection(com.mongodb.session.ClientSession session, MongoCollection<?> collection) {
return createProxyInstance(session, collection, MongoCollection.class); return createProxyInstance(session, collection, MongoCollection.class);
} }

13
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

@ -210,7 +210,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
private SessionSynchronization sessionSynchronization = SessionSynchronization.ON_ACTUAL_TRANSACTION; private SessionSynchronization sessionSynchronization = SessionSynchronization.ON_ACTUAL_TRANSACTION;
/** /**
* Constructor used for a basic template configuration * Constructor used for a basic template configuration.
* *
* @param mongoClient must not be {@literal null}. * @param mongoClient must not be {@literal null}.
* @param databaseName must not be {@literal null} or empty. * @param databaseName must not be {@literal null} or empty.
@ -219,6 +219,17 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
this(new SimpleMongoDbFactory(mongoClient, databaseName), (MongoConverter) null); this(new SimpleMongoDbFactory(mongoClient, databaseName), (MongoConverter) null);
} }
/**
* Constructor used for a basic template configuration.
*
* @param mongoClient must not be {@literal null}.
* @param databaseName must not be {@literal null} or empty.
* @since 2.1
*/
public MongoTemplate(com.mongodb.client.MongoClient mongoClient, String databaseName) {
this(new SimpleMongoClientDbFactory(mongoClient, databaseName), (MongoConverter) null);
}
/** /**
* Constructor used for a basic template configuration. * Constructor used for a basic template configuration.
* *

14
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoClientDbFactory.java

@ -31,12 +31,13 @@ import com.mongodb.client.MongoDatabase;
* @author Christoph Strobl * @author Christoph Strobl
* @since 2.1 * @since 2.1
*/ */
public class SimpleMongoClientDbFactory extends MongoDbFactoryBase<MongoClient> implements DisposableBean { public class SimpleMongoClientDbFactory extends MongoDbFactorySupport<MongoClient> implements DisposableBean {
/** /**
* Creates a new {@link SimpleMongoClientDbFactory} instance for the given {@code connectionString}. * Creates a new {@link SimpleMongoClientDbFactory} instance for the given {@code connectionString}.
* *
* @param connectionString must not be {@literal null}. * @param connectionString connection coordinates for a database connection. Must contain a database name and must not
* be {@literal null} or empty.
* @see <a href="https://docs.mongodb.com/manual/reference/connection-string/">MongoDB Connection String reference</a> * @see <a href="https://docs.mongodb.com/manual/reference/connection-string/">MongoDB Connection String reference</a>
*/ */
public SimpleMongoClientDbFactory(String connectionString) { public SimpleMongoClientDbFactory(String connectionString) {
@ -46,7 +47,8 @@ public class SimpleMongoClientDbFactory extends MongoDbFactoryBase<MongoClient>
/** /**
* Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}. * Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}.
* *
* @param connectionString must not be {@literal null}. * @param connectionString connection coordinates for a database connection. Must contain also a database name and not
* be {@literal null}.
*/ */
public SimpleMongoClientDbFactory(ConnectionString connectionString) { public SimpleMongoClientDbFactory(ConnectionString connectionString) {
this(MongoClients.create(connectionString), connectionString.getDatabase(), true); this(MongoClients.create(connectionString), connectionString.getDatabase(), true);
@ -56,7 +58,7 @@ public class SimpleMongoClientDbFactory extends MongoDbFactoryBase<MongoClient>
* Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}. * Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}.
* *
* @param mongoClient must not be {@literal null}. * @param mongoClient must not be {@literal null}.
* @param databaseName must not be {@literal null}. * @param databaseName must not be {@literal null} or empty.
*/ */
public SimpleMongoClientDbFactory(MongoClient mongoClient, String databaseName) { public SimpleMongoClientDbFactory(MongoClient mongoClient, String databaseName) {
this(mongoClient, databaseName, false); this(mongoClient, databaseName, false);
@ -66,7 +68,7 @@ public class SimpleMongoClientDbFactory extends MongoDbFactoryBase<MongoClient>
* Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}. * Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}.
* *
* @param mongoClient must not be {@literal null}. * @param mongoClient must not be {@literal null}.
* @param databaseName must not be {@literal null}. * @param databaseName must not be {@literal null} or empty.
* @param mongoInstanceCreated * @param mongoInstanceCreated
*/ */
private SimpleMongoClientDbFactory(MongoClient mongoClient, String databaseName, boolean mongoInstanceCreated) { private SimpleMongoClientDbFactory(MongoClient mongoClient, String databaseName, boolean mongoInstanceCreated) {
@ -81,7 +83,7 @@ public class SimpleMongoClientDbFactory extends MongoDbFactoryBase<MongoClient>
public DB getLegacyDb() { public DB getLegacyDb() {
throw new UnsupportedOperationException(String.format( throw new UnsupportedOperationException(String.format(
"%s does not support legacy DBObject API! Please " + "consider using SimpleMongoDbFactory for that purpose.", "%s does not support legacy DBObject API! Please consider using SimpleMongoDbFactory for that purpose.",
MongoClient.class)); MongoClient.class));
} }

18
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoDbFactory.java

@ -36,12 +36,12 @@ import com.mongodb.client.MongoDatabase;
* @author George Moraitis * @author George Moraitis
* @author Mark Paluch * @author Mark Paluch
*/ */
public class SimpleMongoDbFactory extends MongoDbFactoryBase<MongoClient> implements DisposableBean { public class SimpleMongoDbFactory extends MongoDbFactorySupport<MongoClient> implements DisposableBean {
/** /**
* Creates a new {@link SimpleMongoDbFactory} instance from the given {@link MongoClientURI}. * Creates a new {@link SimpleMongoDbFactory} instance from the given {@link MongoClientURI}.
* *
* @param uri must not be {@literal null}. * @param uri coordinates for a database connection. Must contain a database name and must not be {@literal null}.
* @since 1.7 * @since 1.7
*/ */
public SimpleMongoDbFactory(MongoClientURI uri) { public SimpleMongoDbFactory(MongoClientURI uri) {
@ -52,7 +52,7 @@ public class SimpleMongoDbFactory extends MongoDbFactoryBase<MongoClient> implem
* Creates a new {@link SimpleMongoDbFactory} instance from the given {@link MongoClient}. * Creates a new {@link SimpleMongoDbFactory} instance from the given {@link MongoClient}.
* *
* @param mongoClient must not be {@literal null}. * @param mongoClient must not be {@literal null}.
* @param databaseName must not be {@literal null}. * @param databaseName must not be {@literal null} or empty.
* @since 1.7 * @since 1.7
*/ */
public SimpleMongoDbFactory(MongoClient mongoClient, String databaseName) { public SimpleMongoDbFactory(MongoClient mongoClient, String databaseName) {
@ -69,6 +69,10 @@ public class SimpleMongoDbFactory extends MongoDbFactoryBase<MongoClient> implem
super(mongoClient, databaseName, mongoInstanceCreated, new MongoExceptionTranslator()); super(mongoClient, databaseName, mongoInstanceCreated, new MongoExceptionTranslator());
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.MongoDbFactory#getLegacyDb()
*/
@Override @Override
public DB getLegacyDb() { public DB getLegacyDb() {
return getMongoClient().getDB(getDefaultDatabaseName()); return getMongoClient().getDB(getDefaultDatabaseName());
@ -83,11 +87,19 @@ public class SimpleMongoDbFactory extends MongoDbFactoryBase<MongoClient> implem
return getMongoClient().startSession(options); return getMongoClient().startSession(options);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.MongoDbFactoryBase#closeClient()
*/
@Override @Override
protected void closeClient() { protected void closeClient() {
getMongoClient().close(); getMongoClient().close();
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.MongoDbFactoryBase#doGetMongoDatabase(java.lang.String)
*/
@Override @Override
protected MongoDatabase doGetMongoDatabase(String dbName) { protected MongoDatabase doGetMongoDatabase(String dbName) {
return getMongoClient().getDatabase(dbName); return getMongoClient().getDatabase(dbName);

8
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ClientSessionTests.java

@ -19,10 +19,12 @@ import static org.assertj.core.api.Assertions.*;
import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Criteria.*;
import static org.springframework.data.mongodb.core.query.Query.*; import static org.springframework.data.mongodb.core.query.Query.*;
import com.mongodb.MongoClient;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import org.bson.Document; import org.bson.Document;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Rule; import org.junit.Rule;
@ -37,7 +39,6 @@ import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version; import org.springframework.data.util.Version;
import com.mongodb.ClientSessionOptions; import com.mongodb.ClientSessionOptions;
import com.mongodb.MongoClient;
import com.mongodb.client.ClientSession; import com.mongodb.client.ClientSession;
/** /**
@ -66,6 +67,11 @@ public class ClientSessionTests {
template.getDb().getCollection(COLLECTION_NAME).insertOne(new Document("_id", "id-1").append("value", "spring")); template.getDb().getCollection(COLLECTION_NAME).insertOne(new Document("_id", "id-1").append("value", "spring"));
} }
@After
public void tearDown() {
client.close();
}
@Test // DATAMONGO-1880 @Test // DATAMONGO-1880
public void shouldApplyClientSession() { public void shouldApplyClientSession() {

29
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JsonSchemaQueryTests.java

@ -23,7 +23,9 @@ import static org.springframework.data.mongodb.core.schema.JsonSchemaProperty.*;
import lombok.Data; import lombok.Data;
import reactor.test.StepVerifier; import reactor.test.StepVerifier;
import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Test; import org.junit.Test;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
@ -32,11 +34,13 @@ import org.springframework.data.mongodb.core.schema.MongoJsonSchema;
import org.springframework.data.mongodb.test.util.MongoVersionRule; import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version; import org.springframework.data.util.Version;
import com.mongodb.MongoClient; import com.mongodb.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.client.MongoClients;
/** /**
* @author Christoph Strobl * @author Christoph Strobl
* @author Mark Paluch
*/ */
public class JsonSchemaQueryTests { public class JsonSchemaQueryTests {
@ -44,13 +48,19 @@ public class JsonSchemaQueryTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0")); public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
static MongoClient client = MongoClients.create();
MongoTemplate template; MongoTemplate template;
Person jellyBelly, roseSpringHeart, kazmardBoombub; Person jellyBelly, roseSpringHeart, kazmardBoombub;
@BeforeClass
public static void beforeClass() {
client = MongoClients.create();
}
@Before @Before
public void setUp() { public void setUp() {
template = new MongoTemplate(new MongoClient(), DATABASE_NAME); template = new MongoTemplate(client, DATABASE_NAME);
jellyBelly = new Person(); jellyBelly = new Person();
jellyBelly.id = "1"; jellyBelly.id = "1";
@ -81,6 +91,13 @@ public class JsonSchemaQueryTests {
template.save(kazmardBoombub); template.save(kazmardBoombub);
} }
@AfterClass
public static void afterClass() {
if (client != null) {
client.close();
}
}
@Test // DATAMONGO-1835 @Test // DATAMONGO-1835
public void findsDocumentsWithRequiredFieldsCorrectly() { public void findsDocumentsWithRequiredFieldsCorrectly() {
@ -95,8 +112,12 @@ public class JsonSchemaQueryTests {
MongoJsonSchema schema = MongoJsonSchema.builder().required("address").build(); MongoJsonSchema schema = MongoJsonSchema.builder().required("address").build();
StepVerifier.create(new ReactiveMongoTemplate(MongoClients.create(), DATABASE_NAME) com.mongodb.reactivestreams.client.MongoClient mongoClient = com.mongodb.reactivestreams.client.MongoClients.create();
StepVerifier.create(new ReactiveMongoTemplate(mongoClient, DATABASE_NAME)
.find(query(matchingDocumentStructure(schema)), Person.class)).expectNextCount(2).verifyComplete(); .find(query(matchingDocumentStructure(schema)), Person.class)).expectNextCount(2).verifyComplete();
mongoClient.close();
} }
@Test // DATAMONGO-1835 @Test // DATAMONGO-1835

11
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java

@ -161,9 +161,14 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests {
new MongoTemplate(mongo, null); new MongoTemplate(mongo, null);
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class) // DATAMONGO-1968
public void rejectsNullMongo() throws Exception { public void rejectsNullMongo() {
new MongoTemplate(null, "database"); new MongoTemplate((MongoClient) null, "database");
}
@Test(expected = IllegalArgumentException.class) // DATAMONGO-1968
public void rejectsNullMongoClient() {
new MongoTemplate((com.mongodb.client.MongoClient) null, "database");
} }
@Test(expected = IllegalArgumentException.class) // DATAMONGO-1870 @Test(expected = IllegalArgumentException.class) // DATAMONGO-1870

4
src/main/asciidoc/reference/mongodb.adoc

@ -369,8 +369,8 @@ See https://tools.ietf.org/html/rfc3986#section-2.2[section 2.2 of RFC 3986] for
As of MongoDB java driver 3.7.0 there is an alternative entry point to `MongoClient` via the http://search.maven As of MongoDB java driver 3.7.0 there is an alternative entry point to `MongoClient` via the http://search.maven
.org/#search%7Cgav%7C1%7Cg%3A%22org.mongodb%22%20AND%20a%3A%22mongodb-driver-sync%22[mongodb-driver-sync] artifact. .org/#search%7Cgav%7C1%7Cg%3A%22org.mongodb%22%20AND%20a%3A%22mongodb-driver-sync%22[mongodb-driver-sync] artifact.
`com.mongodb.client.MongoClient` is *not* compatible with `com.mongodb.MongoClient` and does not longer support `com.mongodb.client.MongoClient` is *not* compatible with `com.mongodb.MongoClient` and does not longer support
the legacy `DBObject` codec. Therefore it cannot be used with `Querydsl` and requires a different configuration. the legacy `DBObject` codec. Therefore, it cannot be used with `Querydsl` and requires a different configuration.
You may use `AbstractMongoClientConfiguration` to leverage the new `MongoClients` builder API. You can use `AbstractMongoClientConfiguration` to leverage the new `MongoClients` builder API.
[source,java] [source,java]
---- ----

Loading…
Cancel
Save