Browse Source

DATAMONGO-2427 - Polishing.

Replace leftovers to Mongo 2.x API with Document and MongoDatabase references and tweak Javadoc. Reorder field declarations to class header. Reflect 3.0 versions in schema configuration. Add TODO markers to disabled tests.
Reflect changes in documentation.

Enable disabled test.

Original pull request: #823.
pull/830/head
Mark Paluch 6 years ago
parent
commit
6049541d0a
No known key found for this signature in database
GPG Key ID: 51A00FA751B91849
  1. 18
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoClientFactoryBean.java
  2. 133
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoClientSettingsFactoryBean.java
  3. 3
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  4. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoClientSettingsFactoryBean.java
  5. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java
  6. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/PartialIndexFilter.java
  7. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapreduce/MapReduceOptions.java
  8. 3
      spring-data-mongodb/src/main/resources/META-INF/spring.schemas
  9. 1
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoClientNamespaceTests.java
  10. 18
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceTests.java
  11. 24
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoClientFactoryBeanUnitTests.java
  12. 2
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoClientSettingsFactoryBeanUnitTests.java
  13. 2
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java
  14. 8
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryUnitTests.java
  15. 1
      src/main/asciidoc/new-features.adoc
  16. 11
      src/main/asciidoc/preface.adoc
  17. 6
      src/main/asciidoc/reference/client-session-transactions.adoc
  18. 8
      src/main/asciidoc/reference/mapping.adoc
  19. 5
      src/main/asciidoc/reference/migrating.adoc
  20. 11
      src/main/asciidoc/reference/mongo-3.adoc
  21. 4
      src/main/asciidoc/reference/mongo-repositories.adoc
  22. 38
      src/main/asciidoc/reference/mongodb.adoc
  23. 2
      src/main/asciidoc/upgrading.adoc

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

@ -144,10 +144,12 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp @@ -144,10 +144,12 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
}
/**
* Create {@link MongoClientSettings} based on configuration and priority (lower is better). <br />
* 1. {@link MongoClientFactoryBean#mongoClientSettings} <br />
* 2. {@link MongoClientFactoryBean#connectionString} <br />
* 3. default {@link MongoClientSettings}
* Create {@link MongoClientSettings} based on configuration and priority (lower is better).
* <ol>
* <li>{@link MongoClientFactoryBean#mongoClientSettings}</li>
* <li>{@link MongoClientFactoryBean#connectionString}</li>
* <li>default {@link MongoClientSettings}</li>
* </ol>
*
* @since 3.0
*/
@ -220,7 +222,7 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp @@ -220,7 +222,7 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
}) //
.applyToConnectionPoolSettings(settings -> {
applySettings(it -> settings.maintenanceFrequency(it.longValue(), TimeUnit.MILLISECONDS),
applySettings(it -> settings.maintenanceFrequency(it, TimeUnit.MILLISECONDS),
computeSettingsValue((ConnectionPoolSettings it) -> it.getMaintenanceFrequency(TimeUnit.MILLISECONDS),
defaultSettings.getConnectionPoolSettings(), connectionPoolSettings, null));
@ -239,7 +241,7 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp @@ -239,7 +241,7 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
defaultSettings.getConnectionPoolSettings(), connectionPoolSettings,
connectionString.getMaxWaitTime()));
applySettings(it -> settings.maintenanceInitialDelay(it.longValue(), TimeUnit.MILLISECONDS),
applySettings(it -> settings.maintenanceInitialDelay(it, TimeUnit.MILLISECONDS),
computeSettingsValue(
(ConnectionPoolSettings it) -> it.getMaintenanceInitialDelay(TimeUnit.MILLISECONDS),
defaultSettings.getConnectionPoolSettings(), connectionPoolSettings, null));
@ -253,11 +255,11 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp @@ -253,11 +255,11 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
}) //
.applyToSocketSettings(settings -> {
applySettings(it -> settings.connectTimeout(it.intValue(), TimeUnit.MILLISECONDS),
applySettings(it -> settings.connectTimeout(it, TimeUnit.MILLISECONDS),
computeSettingsValue((SocketSettings it) -> it.getConnectTimeout(TimeUnit.MILLISECONDS),
defaultSettings.getSocketSettings(), socketSettings, connectionString.getConnectTimeout()));
applySettings(it -> settings.readTimeout(it.intValue(), TimeUnit.MILLISECONDS),
applySettings(it -> settings.readTimeout(it, TimeUnit.MILLISECONDS),
computeSettingsValue((SocketSettings it) -> it.getReadTimeout(TimeUnit.MILLISECONDS),
defaultSettings.getSocketSettings(), socketSettings, connectionString.getSocketTimeout()));
applySettings(settings::receiveBufferSize, computeSettingsValue(SocketSettings::getReceiveBufferSize,

133
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoClientSettingsFactoryBean.java

@ -24,10 +24,10 @@ import java.util.concurrent.TimeUnit; @@ -24,10 +24,10 @@ import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import org.bson.codecs.configuration.CodecRegistry;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import com.mongodb.AutoEncryptionSettings;
@ -45,6 +45,7 @@ import com.mongodb.connection.StreamFactoryFactory; @@ -45,6 +45,7 @@ import com.mongodb.connection.StreamFactoryFactory;
* A factory bean for construction of a {@link MongoClientSettings} instance to be used with a MongoDB driver.
*
* @author Christoph Strobl
* @author Mark Paluch
* @since 3.0
*/
public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoClientSettings> {
@ -65,18 +66,57 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -65,18 +66,57 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
// --> Socket Settings
private Integer socketConnectTimeoutMS = DEFAULT_MONGO_SETTINGS.getSocketSettings()
private int socketConnectTimeoutMS = DEFAULT_MONGO_SETTINGS.getSocketSettings()
.getConnectTimeout(TimeUnit.MILLISECONDS);
private Integer socketReadTimeoutMS = DEFAULT_MONGO_SETTINGS.getSocketSettings()
.getReadTimeout(TimeUnit.MILLISECONDS);
private Integer socketReceiveBufferSize = DEFAULT_MONGO_SETTINGS.getSocketSettings().getReceiveBufferSize();
private Integer socketSendBufferSize = DEFAULT_MONGO_SETTINGS.getSocketSettings().getSendBufferSize();
private int socketReadTimeoutMS = DEFAULT_MONGO_SETTINGS.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS);
private int socketReceiveBufferSize = DEFAULT_MONGO_SETTINGS.getSocketSettings().getReceiveBufferSize();
private int socketSendBufferSize = DEFAULT_MONGO_SETTINGS.getSocketSettings().getSendBufferSize();
// --> Cluster Settings
private @Nullable String clusterSrvHost = DEFAULT_MONGO_SETTINGS.getClusterSettings().getSrvHost();
private List<ServerAddress> clusterHosts = Collections.emptyList();
private @Nullable ClusterConnectionMode clusterConnectionMode = null;
private ClusterType custerRequiredClusterType = DEFAULT_MONGO_SETTINGS.getClusterSettings().getRequiredClusterType();
private String clusterRequiredReplicaSetName = DEFAULT_MONGO_SETTINGS.getClusterSettings()
.getRequiredReplicaSetName();
private long clusterLocalThresholdMS = DEFAULT_MONGO_SETTINGS.getClusterSettings()
.getLocalThreshold(TimeUnit.MILLISECONDS);
private long clusterServerSelectionTimeoutMS = DEFAULT_MONGO_SETTINGS.getClusterSettings()
.getServerSelectionTimeout(TimeUnit.MILLISECONDS);
// --> ConnectionPoolSettings
private int poolMaxSize = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings().getMaxSize();
private int poolMinSize = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings().getMinSize();
private long poolMaxWaitTimeMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaxWaitTime(TimeUnit.MILLISECONDS);
private long poolMaxConnectionLifeTimeMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaxConnectionLifeTime(TimeUnit.MILLISECONDS);
private long poolMaxConnectionIdleTimeMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaxConnectionIdleTime(TimeUnit.MILLISECONDS);
private long poolMaintenanceInitialDelayMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaintenanceInitialDelay(TimeUnit.MILLISECONDS);
private long poolMaintenanceFrequencyMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaintenanceFrequency(TimeUnit.MILLISECONDS);
// --> SSL Settings
private boolean sslEnabled = DEFAULT_MONGO_SETTINGS.getSslSettings().isEnabled();
private boolean sslInvalidHostNameAllowed = DEFAULT_MONGO_SETTINGS.getSslSettings().isInvalidHostNameAllowed();
private String sslProvider = DEFAULT_MONGO_SETTINGS.getSslSettings().isEnabled()
? DEFAULT_MONGO_SETTINGS.getSslSettings().getContext().getProvider().getName()
: "";
// encryption and retry
private @Nullable AutoEncryptionSettings autoEncryptionSettings;
/**
* @param socketConnectTimeoutMS in msec
* @see com.mongodb.connection.SocketSettings.Builder#connectTimeout(int, TimeUnit)
*/
public void setSocketConnectTimeoutMS(Integer socketConnectTimeoutMS) {
public void setSocketConnectTimeoutMS(int socketConnectTimeoutMS) {
this.socketConnectTimeoutMS = socketConnectTimeoutMS;
}
@ -84,7 +124,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -84,7 +124,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param socketReadTimeoutMS in msec
* @see com.mongodb.connection.SocketSettings.Builder#readTimeout(int, TimeUnit)
*/
public void setSocketReadTimeoutMS(Integer socketReadTimeoutMS) {
public void setSocketReadTimeoutMS(int socketReadTimeoutMS) {
this.socketReadTimeoutMS = socketReadTimeoutMS;
}
@ -92,7 +132,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -92,7 +132,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param socketReceiveBufferSize
* @see com.mongodb.connection.SocketSettings.Builder#receiveBufferSize(int)
*/
public void setSocketReceiveBufferSize(Integer socketReceiveBufferSize) {
public void setSocketReceiveBufferSize(int socketReceiveBufferSize) {
this.socketReceiveBufferSize = socketReceiveBufferSize;
}
@ -100,22 +140,22 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -100,22 +140,22 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param socketSendBufferSize
* @see com.mongodb.connection.SocketSettings.Builder#sendBufferSize(int)
*/
public void setSocketSendBufferSize(Integer socketSendBufferSize) {
public void setSocketSendBufferSize(int socketSendBufferSize) {
this.socketSendBufferSize = socketSendBufferSize;
}
// --> Server Settings
private Long serverHeartbeatFrequencyMS = DEFAULT_MONGO_SETTINGS.getServerSettings()
private long serverHeartbeatFrequencyMS = DEFAULT_MONGO_SETTINGS.getServerSettings()
.getHeartbeatFrequency(TimeUnit.MILLISECONDS);
private Long serverMinHeartbeatFrequencyMS = DEFAULT_MONGO_SETTINGS.getServerSettings()
private long serverMinHeartbeatFrequencyMS = DEFAULT_MONGO_SETTINGS.getServerSettings()
.getMinHeartbeatFrequency(TimeUnit.MILLISECONDS);
/**
* @param serverHeartbeatFrequencyMS in msec
* @see com.mongodb.connection.ServerSettings.Builder#heartbeatFrequency(long, TimeUnit)
*/
public void setServerHeartbeatFrequencyMS(Long serverHeartbeatFrequencyMS) {
public void setServerHeartbeatFrequencyMS(long serverHeartbeatFrequencyMS) {
this.serverHeartbeatFrequencyMS = serverHeartbeatFrequencyMS;
}
@ -123,23 +163,12 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -123,23 +163,12 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param serverMinHeartbeatFrequencyMS in msec
* @see com.mongodb.connection.ServerSettings.Builder#minHeartbeatFrequency(long, TimeUnit)
*/
public void setServerMinHeartbeatFrequencyMS(Long serverMinHeartbeatFrequencyMS) {
public void setServerMinHeartbeatFrequencyMS(long serverMinHeartbeatFrequencyMS) {
this.serverMinHeartbeatFrequencyMS = serverMinHeartbeatFrequencyMS;
}
// --> Cluster Settings
private @Nullable String clusterSrvHost = DEFAULT_MONGO_SETTINGS.getClusterSettings().getSrvHost();
private List<ServerAddress> clusterHosts = Collections.emptyList();
private @Nullable ClusterConnectionMode clusterConnectionMode = null;
private ClusterType custerRequiredClusterType = DEFAULT_MONGO_SETTINGS.getClusterSettings().getRequiredClusterType();
private String clusterRequiredReplicaSetName = DEFAULT_MONGO_SETTINGS.getClusterSettings()
.getRequiredReplicaSetName();
private long clusterLocalThresholdMS = DEFAULT_MONGO_SETTINGS.getClusterSettings()
.getLocalThreshold(TimeUnit.MILLISECONDS);
private long clusterServerSelectionTimeoutMS = DEFAULT_MONGO_SETTINGS.getClusterSettings()
.getServerSelectionTimeout(TimeUnit.MILLISECONDS);
/**
* @param clusterSrvHost
* @see com.mongodb.connection.ClusterSettings.Builder#srvHost(String)
@ -158,7 +187,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -158,7 +187,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
/**
* ????
*
*
* @param clusterConnectionMode
* @see com.mongodb.connection.ClusterSettings.Builder#mode(ClusterConnectionMode)
*/
@ -200,24 +229,11 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -200,24 +229,11 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
// --> ConnectionPoolSettings
private Integer poolMaxSize = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings().getMaxSize();
private Integer poolMinSize = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings().getMinSize();
private Long poolMaxWaitTimeMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaxWaitTime(TimeUnit.MILLISECONDS);
private Long poolMaxConnectionLifeTimeMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaxConnectionLifeTime(TimeUnit.MILLISECONDS);
private Long poolMaxConnectionIdleTimeMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaxConnectionIdleTime(TimeUnit.MILLISECONDS);
private Long poolMaintenanceInitialDelayMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaintenanceInitialDelay(TimeUnit.MILLISECONDS);
private Long poolMaintenanceFrequencyMS = DEFAULT_MONGO_SETTINGS.getConnectionPoolSettings()
.getMaintenanceFrequency(TimeUnit.MILLISECONDS);
/**
* @param poolMaxSize
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#maxSize(int)
*/
public void setPoolMaxSize(Integer poolMaxSize) {
public void setPoolMaxSize(int poolMaxSize) {
this.poolMaxSize = poolMaxSize;
}
@ -225,7 +241,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -225,7 +241,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param poolMinSize
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#minSize(int)
*/
public void setPoolMinSize(Integer poolMinSize) {
public void setPoolMinSize(int poolMinSize) {
this.poolMinSize = poolMinSize;
}
@ -233,7 +249,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -233,7 +249,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param poolMaxWaitTimeMS in mesec
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#maxWaitTime(long, TimeUnit)
*/
public void setPoolMaxWaitTimeMS(Long poolMaxWaitTimeMS) {
public void setPoolMaxWaitTimeMS(long poolMaxWaitTimeMS) {
this.poolMaxWaitTimeMS = poolMaxWaitTimeMS;
}
@ -241,7 +257,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -241,7 +257,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param poolMaxConnectionLifeTimeMS in msec
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#maxConnectionLifeTime(long, TimeUnit)
*/
public void setPoolMaxConnectionLifeTimeMS(Long poolMaxConnectionLifeTimeMS) {
public void setPoolMaxConnectionLifeTimeMS(long poolMaxConnectionLifeTimeMS) {
this.poolMaxConnectionLifeTimeMS = poolMaxConnectionLifeTimeMS;
}
@ -249,7 +265,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -249,7 +265,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param poolMaxConnectionIdleTimeMS in msec
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#maxConnectionIdleTime(long, TimeUnit)
*/
public void setPoolMaxConnectionIdleTimeMS(Long poolMaxConnectionIdleTimeMS) {
public void setPoolMaxConnectionIdleTimeMS(long poolMaxConnectionIdleTimeMS) {
this.poolMaxConnectionIdleTimeMS = poolMaxConnectionIdleTimeMS;
}
@ -257,7 +273,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -257,7 +273,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param poolMaintenanceInitialDelayMS in msec
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#maintenanceInitialDelay(long, TimeUnit)
*/
public void setPoolMaintenanceInitialDelayMS(Long poolMaintenanceInitialDelayMS) {
public void setPoolMaintenanceInitialDelayMS(long poolMaintenanceInitialDelayMS) {
this.poolMaintenanceInitialDelayMS = poolMaintenanceInitialDelayMS;
}
@ -265,18 +281,12 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -265,18 +281,12 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
* @param poolMaintenanceFrequencyMS in msec
* @see com.mongodb.connection.ConnectionPoolSettings.Builder#maintenanceFrequency(long, TimeUnit)
*/
public void setPoolMaintenanceFrequencyMS(Long poolMaintenanceFrequencyMS) {
public void setPoolMaintenanceFrequencyMS(long poolMaintenanceFrequencyMS) {
this.poolMaintenanceFrequencyMS = poolMaintenanceFrequencyMS;
}
// --> SSL Settings
private Boolean sslEnabled = DEFAULT_MONGO_SETTINGS.getSslSettings().isEnabled();
private Boolean sslInvalidHostNameAllowed = DEFAULT_MONGO_SETTINGS.getSslSettings().isInvalidHostNameAllowed();
private String sslProvider = DEFAULT_MONGO_SETTINGS.getSslSettings().isEnabled()
? DEFAULT_MONGO_SETTINGS.getSslSettings().getContext().getProvider().getName()
: "";
/**
* @param sslEnabled
* @see com.mongodb.connection.SslSettings.Builder#enabled(boolean)
@ -304,8 +314,6 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -304,8 +314,6 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
// encryption and retry
private @Nullable AutoEncryptionSettings autoEncryptionSettings;
/**
* @param applicationName
* @see MongoClientSettings.Builder#applicationName(String)
@ -392,11 +400,11 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -392,11 +400,11 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
.readConcern(readConcern) //
.codecRegistry(codecRegistry) //
.applicationName(applicationName) //
.autoEncryptionSettings(autoEncryptionSettings)//
.autoEncryptionSettings(autoEncryptionSettings) //
.applyToClusterSettings((settings) -> {
settings.serverSelectionTimeout(clusterServerSelectionTimeoutMS, TimeUnit.MILLISECONDS);
if(clusterConnectionMode != null) {
if (clusterConnectionMode != null) {
settings.mode(clusterConnectionMode);
}
settings.requiredReplicaSetName(clusterRequiredReplicaSetName);
@ -405,7 +413,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -405,7 +413,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
settings.hosts(clusterHosts);
}
settings.localThreshold(clusterLocalThresholdMS, TimeUnit.MILLISECONDS);
// settings.maxWaitQueueSize(clusterMaxWaitQueueSize);
// settings.maxWaitQueueSize(clusterMaxWaitQueueSize);
settings.requiredClusterType(custerRequiredClusterType);
if (StringUtils.hasText(clusterSrvHost)) {
@ -419,7 +427,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -419,7 +427,7 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
settings.maxConnectionIdleTime(poolMaxConnectionIdleTimeMS, TimeUnit.MILLISECONDS);
settings.maxWaitTime(poolMaxWaitTimeMS, TimeUnit.MILLISECONDS);
settings.maxConnectionLifeTime(poolMaxConnectionLifeTimeMS, TimeUnit.MILLISECONDS);
// settings.maxWaitQueueSize(poolMaxWaitQueueSize);
// settings.maxWaitQueueSize(poolMaxWaitQueueSize);
settings.maintenanceFrequency(poolMaintenanceFrequencyMS, TimeUnit.MILLISECONDS);
settings.maintenanceInitialDelay(poolMaintenanceInitialDelayMS, TimeUnit.MILLISECONDS);
}) //
@ -430,19 +438,20 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli @@ -430,19 +438,20 @@ public class MongoClientSettingsFactoryBean extends AbstractFactoryBean<MongoCli
}) //
.applyToSocketSettings((settings) -> {
settings.connectTimeout(socketConnectTimeoutMS.intValue(), TimeUnit.MILLISECONDS);
settings.readTimeout(socketReadTimeoutMS.intValue(), TimeUnit.MILLISECONDS);
settings.connectTimeout(socketConnectTimeoutMS, TimeUnit.MILLISECONDS);
settings.readTimeout(socketReadTimeoutMS, TimeUnit.MILLISECONDS);
settings.receiveBufferSize(socketReceiveBufferSize);
settings.sendBufferSize(socketSendBufferSize);
}) //
.applyToSslSettings((settings) -> {
settings.enabled(sslEnabled);
if (ObjectUtils.nullSafeEquals(Boolean.TRUE, sslEnabled)) {
if (sslEnabled) {
settings.invalidHostNameAllowed(sslInvalidHostNameAllowed);
try {
settings.context(StringUtils.hasText(sslProvider) ? SSLContext.getInstance(sslProvider) : SSLContext.getDefault());
settings.context(
StringUtils.hasText(sslProvider) ? SSLContext.getInstance(sslProvider) : SSLContext.getDefault());
} catch (NoSuchAlgorithmException e) {
throw new IllegalArgumentException(e.getMessage(), e);
}

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

@ -17,6 +17,7 @@ package org.springframework.data.mongodb.core; @@ -17,6 +17,7 @@ package org.springframework.data.mongodb.core;
import static org.springframework.data.mongodb.core.query.SerializationUtils.*;
import com.mongodb.client.MongoClient;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.NonNull;
@ -213,7 +214,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, @@ -213,7 +214,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
* @param databaseName must not be {@literal null} or empty.
* @since 2.1
*/
public MongoTemplate(com.mongodb.client.MongoClient mongoClient, String databaseName) {
public MongoTemplate(MongoClient mongoClient, String databaseName) {
this(new SimpleMongoClientDatabaseFactory(mongoClient, databaseName), (MongoConverter) null);
}

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoClientSettingsFactoryBean.java

@ -21,6 +21,7 @@ import com.mongodb.MongoClientSettings; @@ -21,6 +21,7 @@ import com.mongodb.MongoClientSettings;
* A factory bean for construction of a {@link MongoClientSettings} instance to be used with the async MongoDB driver.
*
* @author Mark Paluch
* @author Christoph Strobl
* @since 2.0
* @deprecated since 3.0 - Use {@link MongoClientSettingsFactoryBean} instead.
*/

4
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java

@ -23,8 +23,6 @@ import org.springframework.data.mongodb.core.query.Collation; @@ -23,8 +23,6 @@ import org.springframework.data.mongodb.core.query.Collation;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.mongodb.DBObject;
/**
* Holds a set of configurable aggregation options that can be used within an aggregation pipeline. A list of support
* aggregation options can be found in the MongoDB reference documentation
@ -115,7 +113,7 @@ public class AggregationOptions { @@ -115,7 +113,7 @@ public class AggregationOptions {
}
/**
* Creates new {@link AggregationOptions} given {@link DBObject} containing aggregation options.
* Creates new {@link AggregationOptions} given {@link Document} containing aggregation options.
*
* @param document must not be {@literal null}.
* @return the {@link AggregationOptions}.

4
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/PartialIndexFilter.java

@ -26,7 +26,7 @@ import org.springframework.data.mongodb.core.query.CriteriaDefinition; @@ -26,7 +26,7 @@ import org.springframework.data.mongodb.core.query.CriteriaDefinition;
import com.mongodb.DBObject;
/**
* {@link IndexFilter} implementation for usage with plain {@link DBObject} as well as {@link CriteriaDefinition} filter
* {@link IndexFilter} implementation for usage with plain {@link Document} as well as {@link CriteriaDefinition} filter
* expressions.
*
* @author Christoph Strobl
@ -38,7 +38,7 @@ public class PartialIndexFilter implements IndexFilter { @@ -38,7 +38,7 @@ public class PartialIndexFilter implements IndexFilter {
private final @NonNull Object filterExpression;
/**
* Create new {@link PartialIndexFilter} for given {@link DBObject filter expression}.
* Create new {@link PartialIndexFilter} for given {@link Document filter expression}.
*
* @param where must not be {@literal null}.
* @return

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapreduce/MapReduceOptions.java

@ -358,7 +358,7 @@ public class MapReduceOptions { @@ -358,7 +358,7 @@ public class MapReduceOptions {
}
/**
* @return {@literal true} if {@literal inline} output shall is used.
* @return {@literal true} if {@literal inline} output is used.
* @since 2.0.10
*/
public boolean usesInlineOutput() {

3
spring-data-mongodb/src/main/resources/META-INF/spring.schemas

@ -10,7 +10,8 @@ http\://www.springframework.org/schema/data/mongo/spring-mongo-1.10.xsd=org/spri @@ -10,7 +10,8 @@ http\://www.springframework.org/schema/data/mongo/spring-mongo-1.10.xsd=org/spri
http\://www.springframework.org/schema/data/mongo/spring-mongo-1.10.2.xsd=org/springframework/data/mongodb/config/spring-mongo-1.10.2.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo-2.0.xsd=org/springframework/data/mongodb/config/spring-mongo-2.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/springframework/data/mongodb/config/spring-mongo-2.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-2.2.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo-3.0.xsd=org/springframework/data/mongodb/config/spring-mongo-3.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-3.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd=org/springframework/data/mongodb/config/spring-mongo-1.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-1.1.xsd=org/springframework/data/mongodb/config/spring-mongo-1.1.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-1.2.xsd=org/springframework/data/mongodb/config/spring-mongo-1.2.xsd

1
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoClientNamespaceTests.java

@ -140,5 +140,4 @@ public class MongoClientNamespaceTests { @@ -140,5 +140,4 @@ public class MongoClientNamespaceTests {
assertThat(settings.getConnectionPoolSettings().getMaxConnectionIdleTime(TimeUnit.MILLISECONDS)).isEqualTo(30);
assertThat(settings.getConnectionPoolSettings().getMaxWaitTime(TimeUnit.MILLISECONDS)).isEqualTo(15);
}
}

18
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceTests.java

@ -204,8 +204,7 @@ public class MongoNamespaceTests { @@ -204,8 +204,7 @@ public class MongoNamespaceTests {
}
@Test
@SuppressWarnings("deprecation")
public void testMongoSingletonWithPropertyPlaceHolders() throws Exception {
public void testMongoSingletonWithPropertyPlaceHolders() {
assertThat(ctx.containsBean("mongoClient")).isTrue();
MongoClientFactoryBean mfb = (MongoClientFactoryBean) ctx.getBean("&mongoClient");
@ -215,20 +214,5 @@ public class MongoNamespaceTests { @@ -215,20 +214,5 @@ public class MongoNamespaceTests {
assertThat(host).isEqualTo("127.0.0.1");
assertThat(port).isEqualTo(new Integer(27017));
// MongoClient mongo = mfb.getObject();
// MongoClientSettings mongoOpts = mongo.getClusterDescription()..getMongoClientSettings();
//
// assertThat(mongoOpts.getConnectionsPerHost()).isEqualTo(8);
// assertThat(mongoOpts.getConnectTimeout()).isEqualTo(1000);
// assertThat(mongoOpts.getMaxWaitTime()).isEqualTo(1500);
//
// assertThat(mongoOpts.getSocketTimeout()).isEqualTo(1500);
// assertThat(mongoOpts.getThreadsAllowedToBlockForConnectionMultiplier()).isEqualTo(4);
// TODO: check the damned defaults
// assertEquals("w", mongoOpts.getWriteConcern().getW());
// assertEquals(0, mongoOpts.getWriteConcern().getWtimeout());
// assertEquals(true, mongoOpts.getWriteConcern().fsync());
}
}

24
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoClientFactoryBeanUnitTests.java

@ -1,19 +1,3 @@ @@ -1,19 +1,3 @@
/*
* Copyright 2019. the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Copyright 2019 the original author or authors.
*
@ -35,13 +19,15 @@ import static org.assertj.core.api.Assertions.*; @@ -35,13 +19,15 @@ import static org.assertj.core.api.Assertions.*;
import java.util.concurrent.TimeUnit;
import com.mongodb.ServerAddress;
import org.junit.jupiter.api.Test;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
/**
* Unit tests for {@link MongoClientFactoryBean}.
*
* @author Christoph Strobl
*/
class MongoClientFactoryBeanUnitTests {
@ -95,12 +81,12 @@ class MongoClientFactoryBeanUnitTests { @@ -95,12 +81,12 @@ class MongoClientFactoryBeanUnitTests {
}
@Test // DATAMONGO-2427
void hostAndPortPlusConnectionStringError() throws Exception {
void hostAndPortPlusConnectionStringError() {
MongoClientFactoryBean factoryBean = new MongoClientFactoryBean();
factoryBean.setConnectionString(CONNECTION_STRING);
factoryBean.setHost("localhost");
factoryBean.setPort(27017);
assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> factoryBean.createInstance());
assertThatExceptionOfType(IllegalStateException.class).isThrownBy(factoryBean::createInstance);
}
}

2
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoClientSettingsFactoryBeanUnitTests.java

@ -28,7 +28,7 @@ import com.mongodb.ReadConcern; @@ -28,7 +28,7 @@ import com.mongodb.ReadConcern;
import com.mongodb.ReadPreference;
/**
* Integration tests for {@link MongoClientSettingsFactoryBean}.
* Unit tests for {@link MongoClientSettingsFactoryBean}.
*
* @author Christoph Strobl
*/

2
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java

@ -79,6 +79,7 @@ public class QueryCursorPreparerUnitTests { @@ -79,6 +79,7 @@ public class QueryCursorPreparerUnitTests {
verify(cursor).hint(new Document("age", 1));
}
// TODO
// @Test // DATAMONGO-957
// public void doesNotApplyMetaWhenEmpty() {
//
@ -117,6 +118,7 @@ public class QueryCursorPreparerUnitTests { @@ -117,6 +118,7 @@ public class QueryCursorPreparerUnitTests {
verify(cursor).comment("spring data");
}
// TODO
// @Test // DATAMONGO-957
// public void appliesSnapshotCorrectly() {
//

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

@ -17,7 +17,6 @@ package org.springframework.data.mongodb.core; @@ -17,7 +17,6 @@ package org.springframework.data.mongodb.core;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.util.ReflectionTestUtils.*;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
@ -26,6 +25,7 @@ import org.junit.Test; @@ -26,6 +25,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.aop.framework.AopProxyUtils;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.test.util.ReflectionTestUtils;
@ -61,7 +61,6 @@ public class SimpleMongoClientDatabaseFactoryUnitTests { @@ -61,7 +61,6 @@ public class SimpleMongoClientDatabaseFactoryUnitTests {
}
@Test // DATADOC-254
@SuppressWarnings("deprecation")
public void allowsDatabaseNames() {
new SimpleMongoClientDatabaseFactory(mongo, "foo-bar");
new SimpleMongoClientDatabaseFactory(mongo, "foo_bar");
@ -69,14 +68,13 @@ public class SimpleMongoClientDatabaseFactoryUnitTests { @@ -69,14 +68,13 @@ public class SimpleMongoClientDatabaseFactoryUnitTests {
}
@Test // DATADOC-295
@SuppressWarnings("deprecation")
public void mongoUriConstructor() {
ConnectionString mongoURI = new ConnectionString(
"mongodb://myUsername:myPassword@localhost/myDatabase.myCollection");
MongoDatabaseFactory mongoDbFactory = new SimpleMongoClientDatabaseFactory(mongoURI);
assertThat(getField(mongoDbFactory, "databaseName").toString()).isEqualTo("myDatabase");
assertThat(mongoDbFactory).hasFieldOrPropertyWithValue("databaseName", "myDatabase");
}
@Test // DATAMONGO-1158
@ -86,7 +84,7 @@ public class SimpleMongoClientDatabaseFactoryUnitTests { @@ -86,7 +84,7 @@ public class SimpleMongoClientDatabaseFactoryUnitTests {
"mongodb://myUserName:myPassWord@127.0.0.1:27017/myDataBase.myCollection");
SimpleMongoClientDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(uri);
assertThat(getField(factory, "databaseName").toString()).isEqualTo("myDataBase");
assertThat(factory).hasFieldOrPropertyWithValue("databaseName", "myDataBase");
}
@Test // DATAMONGO-1880

1
src/main/asciidoc/new-features.adoc

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
[[new-features.3.0]]
== What's New in Spring Data MongoDB 3.0
* Upgrade to MongoDB Driver 4.0. See <<upgrading.2-3>> for further details.
* Support for <<mongo-template.aggregation-update,aggregation pipelines in update operations>>.
* Removal of `_id` flattening for composite Id's when using `MongoTemplate` aggregations.
* Apply pagination when using GridFS `find(Query)`.

11
src/main/asciidoc/preface.adoc

@ -39,20 +39,23 @@ The starting point for learning about MongoDB is https://www.mongodb.org/[www.mo @@ -39,20 +39,23 @@ The starting point for learning about MongoDB is https://www.mongodb.org/[www.mo
[[requirements]]
== Requirements
The Spring Data MongoDB 2.x binaries require JDK level 8.0 and above and https://spring.io/docs[Spring Framework] {springVersion} and above.
The Spring Data MongoDB 3.x binaries require JDK level 8.0 and above and https://spring.io/docs[Spring Framework] {springVersion} and above.
In terms of document stores, you need at least version 2.6 of https://www.mongodb.org/[MongoDB].
[[get-started:help]]
== Additional Help Resources
Learning a new framework is not always straightforward. In this section, we try to provide what we think is an easy-to-follow guide for starting with the Spring Data MongoDB module. However, if you encounter issues or you need advice, feel free to use one of the following links:
Learning a new framework is not always straightforward.
In this section, we try to provide what we think is an easy-to-follow guide for starting with the Spring Data MongoDB module.
However, if you encounter issues or you need advice, feel free to use one of the following links:
[[get-started:help:community]]
Community Forum :: Spring Data on https://stackoverflow.com/questions/tagged/spring-data[Stack Overflow] is a tag for all Spring Data (not just Document) users to share information and help each other. Note that registration is needed only for posting.
Community Forum :: Spring Data on https://stackoverflow.com/questions/tagged/spring-data[Stack Overflow] is a tag for all Spring Data (not just Document) users to share information and help each other.
Note that registration is needed only for posting.
[[get-started:help:professional]]
Professional Support :: Professional, from-the-source support, with guaranteed response time, is available from https://pivotal.io/[Pivotal Sofware, Inc.], the company behind Spring Data and Spring.
Professional Support :: Professional, from-the-source support, with guaranteed response time, is available from https://pivotal.io/[Pivotal Software, Inc.], the company behind Spring Data and Spring.
[[get-started:up-to-date]]
== Following Development

6
src/main/asciidoc/reference/client-session-transactions.adoc

@ -185,10 +185,10 @@ The `MongoTransactionManager` binds a `ClientSession` to the thread. `MongoTempl @@ -185,10 +185,10 @@ The `MongoTransactionManager` binds a `ClientSession` to the thread. `MongoTempl
[source,java]
----
@Configuration
static class Config extends AbstractMongoConfiguration {
static class Config extends AbstractMongoClientConfiguration {
@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) { <1>
MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) { <1>
return new MongoTransactionManager(dbFactory);
}
@ -199,7 +199,7 @@ static class Config extends AbstractMongoConfiguration { @@ -199,7 +199,7 @@ static class Config extends AbstractMongoConfiguration {
public class StateService {
@Transactional
void someBusinessFunction(Step step) { <2>
void someBusinessFunction(Step step) { <2>
template.insert(step);

8
src/main/asciidoc/reference/mapping.adoc

@ -278,7 +278,6 @@ public class GeoSpatialAppConfig extends AbstractMongoClientConfiguration { @@ -278,7 +278,6 @@ public class GeoSpatialAppConfig extends AbstractMongoClientConfiguration {
// the following are optional
@Bean
@Override
public CustomConversions customConversions() throws Exception {
@ -311,10 +310,9 @@ Spring's MongoDB namespace lets you enable mapping functionality in XML, as the @@ -311,10 +310,9 @@ Spring's MongoDB namespace lets you enable mapping functionality in XML, as the
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
xsi:schemaLocation="
http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Default bean name is 'mongo' -->
@ -769,7 +767,7 @@ To selectively handle the conversion yourself, register one or more one or more @@ -769,7 +767,7 @@ To selectively handle the conversion yourself, register one or more one or more
NOTE: Spring 3.0 introduced a core.convert package that provides a general type conversion system. This is described in detail in the Spring reference documentation section entitled https://docs.spring.io/spring/docs/{springVersion}/spring-framework-reference/core.html#validation["`Spring Type Conversion`"].
You can use the `customConversions` method in `AbstractMongoConfiguration` to configure converters. The examples <<mapping-configuration, at the beginning of this chapter>> show how to perform the configuration using Java and XML.
You can use the `customConversions` method in `AbstractMongoClientConfiguration` to configure converters. The examples <<mapping-configuration, at the beginning of this chapter>> show how to perform the configuration using Java and XML.
The following example of a Spring Converter implementation converts from a `Document` to a `Person` POJO:

5
src/main/asciidoc/reference/migrating.adoc

@ -13,8 +13,7 @@ This chapter coverts major changes and outlines migration steps. @@ -13,8 +13,7 @@ This chapter coverts major changes and outlines migration steps.
** core-jar
** sync-jar
This allows to include eg. just the reactive bits without having to pull in all the sync stuff.
The change in dependencies allows usage of the reactive support without having to pull the synchronous driver.
NOTE: The new sync driver does no longer support `com.mongodb.DBObject`. Please use `org.bson.Document` instead.
=== Signature Changes
@ -22,7 +21,7 @@ NOTE: The new sync driver does no longer support `com.mongodb.DBObject`. Please @@ -22,7 +21,7 @@ NOTE: The new sync driver does no longer support `com.mongodb.DBObject`. Please
* `MongoTemplate` no longer supports `com.mongodb.MongoClient` and `com.mongodb.MongoClientOptions`.
Please use `com.mongodb.client.MongoClient` and `com.mongodb.MongoClientSettings` instead.
In case you're using `AbstractMongoConfiguration` please switch to `AbstractMongoClientInformation`.
In case you're using `AbstractMongoConfiguration` please switch to `AbstractMongoClientConfiguration`.
=== Namespace Changes

11
src/main/asciidoc/reference/mongo-3.adoc

@ -1,12 +1,10 @@ @@ -1,12 +1,10 @@
[[mongo.mongo-3]]
= MongoDB 3.0 Support
Spring Data MongoDB requires MongoDB Java driver generations 3 when connecting to a MongoDB 2.6/3.0 server running MMap.v1 or a MongoDB server 3.0 using MMap.v1 or the WiredTiger storage engine.
Spring Data MongoDB requires MongoDB Java driver generations 4 when connecting to a MongoDB 2.6/3.0 server running MMap.v1 or a MongoDB server 3.0 using MMap.v1 or the WiredTiger storage engine.
NOTE: See the driver- and database-specific documentation for major differences between those engines.
NOTE: Operations that are no longer valid when using a 3.x MongoDB Java driver have been deprecated within Spring Data and will be removed in a subsequent release.
== Using Spring Data MongoDB with MongoDB 3.0
The rest of this section describes how to use Spring Data MongoDB with MongoDB 3.0.
@ -51,7 +49,7 @@ MongoDB Server generation 3 changed the authentication model when connecting to @@ -51,7 +49,7 @@ MongoDB Server generation 3 changed the authentication model when connecting to
[source,java]
----
@Configuration
public class ApplicationContextEventTestsAppConfig extends AbstractMongoConfiguration {
public class ApplicationContextEventTestsAppConfig extends AbstractMongoClientConfiguration {
@Override
public String getDatabaseName() {
@ -118,11 +116,12 @@ NOTE: The field names used within the query expression are mapped to the domain @@ -118,11 +116,12 @@ NOTE: The field names used within the query expression are mapped to the domain
[[mongo.mongo-3.misc]]
=== Miscellaneous Details
This section covers briefly lists additional things to keep in mind when using the 3.0 driver:
This section covers briefly lists additional things to keep in mind when using the 4.0 driver:
* `IndexOperations.resetIndexCache()` is no longer supported.
* Any `MapReduceOptions.extraOption` is silently ignored.
* `WriteResult` no longer holds error information but, instead, throws an `Exception`.
* `MongoOperations.executeInSession(…)` no longer calls `requestStart` and `requestDone`.
* Index name generation has become a driver-internal operation. Spring Data MongoDB still uses the 2.x schema to generate names.
* Index name generation has become a driver-internal operation.
Spring Data MongoDB still uses the 2.x schema to generate names.
* Some `Exception` messages differ between the generation 2 and 3 servers as well as between the MMap.v1 and WiredTiger storage engines.

4
src/main/asciidoc/reference/mongo-repositories.adoc

@ -112,7 +112,7 @@ Because our domain repository extends `PagingAndSortingRepository`, it provides @@ -112,7 +112,7 @@ Because our domain repository extends `PagingAndSortingRepository`, it provides
====
[source,java]
----
@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(SpringRunner.class)
@ContextConfiguration
public class PersonRepositoryTests {
@ -601,7 +601,7 @@ class MongoTemplateProducer { @@ -601,7 +601,7 @@ class MongoTemplateProducer {
@ApplicationScoped
public MongoOperations createMongoTemplate() {
MongoDbFactory factory = new SimpleMongoClientDbFactory(MongoClients.create(), "database");
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database");
return new MongoTemplate(factory);
}
}

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

@ -165,7 +165,7 @@ There is a https://github.com/spring-projects/spring-data-examples[GitHub reposi @@ -165,7 +165,7 @@ There is a https://github.com/spring-projects/spring-data-examples[GitHub reposi
[[mongodb-connectors]]
== Connecting to MongoDB with Spring
One of the first tasks when using MongoDB and Spring is to create a `com.mongodb.client.MongoClient` or `com.mongodb.client.MongoClient` object using the IoC container. There are two main ways to do this, either by using Java-based bean metadata or by using XML-based bean metadata. Both are discussed in the following sections.
One of the first tasks when using MongoDB and Spring is to create a `com.mongodb.client.MongoClient` object using the IoC container. There are two main ways to do this, either by using Java-based bean metadata or by using XML-based bean metadata. Both are discussed in the following sections.
NOTE: For those not familiar with how to configure the Spring container using Java-based bean metadata instead of XML-based metadata, see the high-level introduction in the reference docs https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/new-in-3.0.html#new-java-configuration[here] as well as the detailed documentation https://docs.spring.io/spring/docs/{springVersion}/spring-framework-reference/core.html#beans-java-instantiating-container[here].
@ -230,11 +230,9 @@ To use the Mongo namespace elements, you need to reference the Mongo schema, as @@ -230,11 +230,9 @@ To use the Mongo namespace elements, you need to reference the Mongo schema, as
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation=
"http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
"
http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
@ -281,21 +279,21 @@ The following example shows a configuration using replica sets: @@ -281,21 +279,21 @@ The following example shows a configuration using replica sets:
====
[[mongo.mongo-db-factory]]
=== The MongoDbFactory Interface
=== The MongoDatabaseFactory Interface
While `com.mongodb.client.MongoClient` is the entry point to the MongoDB driver API, connecting to a specific MongoDB database instance requires additional information, such as the database name and an optional username and password. With that information, you can obtain a `com.mongodb.client.MongoDatabase` object and access all the functionality of a specific MongoDB database instance. Spring provides the `org.springframework.data.mongodb.core.MongoDbFactory` interface, shown in the following listing, to bootstrap connectivity to the database:
While `com.mongodb.client.MongoClient` is the entry point to the MongoDB driver API, connecting to a specific MongoDB database instance requires additional information, such as the database name and an optional username and password. With that information, you can obtain a `com.mongodb.client.MongoDatabase` object and access all the functionality of a specific MongoDB database instance. Spring provides the `org.springframework.data.mongodb.core.MongoDatabaseFactory` interface, shown in the following listing, to bootstrap connectivity to the database:
[source,java]
----
public interface MongoDbFactory {
public interface MongoDatabaseFactory {
MongoDatabase getDb() throws DataAccessException;
MongoDatabase getDatabase() throws DataAccessException;
MongoDatabase getDb(String dbName) throws DataAccessException;
MongoDatabase getDatabase(String dbName) throws DataAccessException;
}
----
The following sections show how you can use the container with either Java-based or XML-based metadata to configure an instance of the `MongoDbFactory` interface. In turn, you can use the `MongoDbFactory` instance to configure `MongoTemplate`.
The following sections show how you can use the container with either Java-based or XML-based metadata to configure an instance of the `MongoDatabaseFactory` interface. In turn, you can use the `MongoDatabaseFactory` instance to configure `MongoTemplate`.
Instead of using the IoC container to create an instance of MongoTemplate, you can use them in standard Java code, as follows:
@ -307,7 +305,7 @@ public class MongoApp { @@ -307,7 +305,7 @@ public class MongoApp {
public static void main(String[] args) throws Exception {
MongoOperations mongoOps = new MongoTemplate(new SimpleMongoClientDbFactory(MongoClients.create(), "database"));
MongoOperations mongoOps = new MongoTemplate(new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database"));
mongoOps.insert(new Person("Joe", 34));
@ -323,17 +321,17 @@ The code in bold highlights the use of `SimpleMongoClientDbFactory` and is the o @@ -323,17 +321,17 @@ The code in bold highlights the use of `SimpleMongoClientDbFactory` and is the o
NOTE: Use `SimpleMongoClientDbFactory` when choosing `com.mongodb.client.MongoClient` as the entrypoint of choice.
[[mongo.mongo-db-factory-java]]
=== Registering a `MongoDbFactory` Instance by Using Java-based Metadata
=== Registering a `MongoDatabaseFactory` Instance by Using Java-based Metadata
To register a `MongoDbFactory` instance with the container, you write code much like what was highlighted in the previous code listing. The following listing shows a simple example:
To register a `MongoDatabaseFactory` instance with the container, you write code much like what was highlighted in the previous code listing. The following listing shows a simple example:
[source,java]
----
@Configuration
public class MongoConfiguration {
public @Bean MongoDbFactory mongoDbFactory() {
return new SimpleMongoClientDbFactory(MongoClients.create(), "database");
public @Bean MongoDatabaseFactory mongoDatabaseFactory() {
return new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database");
}
}
----
@ -391,7 +389,7 @@ public class MongoClientConfiguration extends AbstractMongoClientConfiguration { @@ -391,7 +389,7 @@ public class MongoClientConfiguration extends AbstractMongoClientConfiguration {
----
[[mongo.mongo-db-factory-xml]]
=== Registering a `MongoDbFactory` Instance by Using XML-based Metadata
=== Registering a `MongoDatabaseFactory` Instance by Using XML-based Metadata
The `mongo` namespace provides a convenient way to create a `SimpleMongoClientDbFactory`, as compared to using the `<beans/>` namespace, as shown in the following example:
@ -470,12 +468,12 @@ public class AppConfig { @@ -470,12 +468,12 @@ public class AppConfig {
There are several overloaded constructors of `MongoTemplate`:
* `MongoTemplate(MongoClient mongo, String databaseName)`: Takes the `MongoClient` object and the default database name to operate against.
* `MongoTemplate(MongoDbFactory mongoDbFactory)`: Takes a MongoDbFactory object that encapsulated the `MongoClient` object, database name, and username and password.
* `MongoTemplate(MongoDbFactory mongoDbFactory, MongoConverter mongoConverter)`: Adds a `MongoConverter` to use for mapping.
* `MongoTemplate(MongoDatabaseFactory mongoDbFactory)`: Takes a MongoDbFactory object that encapsulated the `MongoClient` object, database name, and username and password.
* `MongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter)`: Adds a `MongoConverter` to use for mapping.
You can also configure a MongoTemplate by using Spring's XML <beans/> schema, as the following example shows:
[source,java]
[source,xml]
----
<mongo:mongo-client host="localhost" port="27017"/>
@ -3270,7 +3268,7 @@ boolean hasIndex = template.execute("geolocation", new CollectionCallbackBoolean @@ -3270,7 +3268,7 @@ boolean hasIndex = template.execute("geolocation", new CollectionCallbackBoolean
[[gridfs]]
== GridFS Support
MongoDB supports storing binary files inside its filesystem, GridFS. Spring Data MongoDB provides a `GridFsOperations` interface as well as the corresponding implementation, `GridFsTemplate`, to let you interact with the filesystem. You can set up a `GridFsTemplate` instance by handing it a `MongoDbFactory` as well as a `MongoConverter`, as the following example shows:
MongoDB supports storing binary files inside its filesystem, GridFS. Spring Data MongoDB provides a `GridFsOperations` interface as well as the corresponding implementation, `GridFsTemplate`, to let you interact with the filesystem. You can set up a `GridFsTemplate` instance by handing it a `MongoDatabaseFactory` as well as a `MongoConverter`, as the following example shows:
.JavaConfig setup for a GridFsTemplate
====

2
src/main/asciidoc/upgrading.adoc

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
[[upgrading]]
[[upgrading.2-3]]
= Upgrading from 2.x to 3.x
Spring Data MongoDB 3.x requires the MongoDB Java Driver 4.x. +

Loading…
Cancel
Save