diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java index ae3f8b643c..9cc12d94b4 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java @@ -39,6 +39,7 @@ import org.springframework.core.env.Environment; * @author Josh Long * @author Andy Wilkinson * @author EddĂș MelĂ©ndez + * @author Nasko Vasilev */ @ConfigurationProperties(prefix = "spring.data.mongodb") public class MongoProperties { @@ -270,8 +271,17 @@ public class MongoProperties { builder.dbDecoderFactory(options.getDbDecoderFactory()); builder.dbEncoderFactory(options.getDbEncoderFactory()); builder.description(options.getDescription()); + builder.heartbeatConnectTimeout(options.getHeartbeatConnectTimeout()); + builder.heartbeatFrequency(options.getHeartbeatFrequency()); + builder.heartbeatSocketTimeout(options.getHeartbeatSocketTimeout()); + builder.localThreshold(options.getLocalThreshold()); + builder.minConnectionsPerHost(options.getMinConnectionsPerHost()); + builder.minHeartbeatFrequency(options.getMinHeartbeatFrequency()); + builder.maxConnectionIdleTime(options.getMaxConnectionIdleTime()); + builder.maxConnectionLifeTime(options.getMaxConnectionLifeTime()); builder.maxWaitTime(options.getMaxWaitTime()); builder.readPreference(options.getReadPreference()); + builder.requiredReplicaSetName(options.getRequiredReplicaSetName()); builder.socketFactory(options.getSocketFactory()); builder.socketKeepAlive(options.isSocketKeepAlive()); builder.socketTimeout(options.getSocketTimeout()); diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java index fd6f5dddeb..278ac934e8 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2016 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. @@ -20,6 +20,7 @@ import java.net.UnknownHostException; import java.util.List; import com.mongodb.MongoClient; +import com.mongodb.MongoClientOptions; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import org.junit.Test; @@ -120,6 +121,54 @@ public class MongoPropertiesTests { assertMongoCredential(credentialsList.get(0), "user", "secret", "test"); } + @Test + public void allMongoClientOptionsCanBeSet() throws UnknownHostException { + MongoClientOptions mco = MongoClientOptions.builder() + .alwaysUseMBeans(true) + .connectionsPerHost(101) + .connectTimeout(10001) + .cursorFinalizerEnabled(false) + .description("test") + .maxWaitTime(120001) + .socketKeepAlive(true) + .socketTimeout(1000) + .threadsAllowedToBlockForConnectionMultiplier(6) + .minConnectionsPerHost(0) + .maxConnectionIdleTime(60000) + .maxConnectionLifeTime(60000) + .heartbeatFrequency(10001) + .minHeartbeatFrequency(501) + .heartbeatConnectTimeout(20001) + .heartbeatSocketTimeout(20001) + .localThreshold(20) + .requiredReplicaSetName("testReplicaSetName") + .build(); + + MongoProperties properties = new MongoProperties(); + MongoClient client = properties.createMongoClient(mco, null); + MongoClientOptions wrappedMco = client.getMongoClientOptions(); + + assertThat(wrappedMco.isAlwaysUseMBeans(), equalTo(mco.isAlwaysUseMBeans())); + assertThat(wrappedMco.getConnectionsPerHost(), equalTo(mco.getConnectionsPerHost())); + assertThat(wrappedMco.getConnectTimeout(), equalTo(mco.getConnectTimeout())); + assertThat(wrappedMco.isCursorFinalizerEnabled(), equalTo(mco.isCursorFinalizerEnabled())); + assertThat(wrappedMco.getDescription(), equalTo(mco.getDescription())); + assertThat(wrappedMco.getMaxWaitTime(), equalTo(mco.getMaxWaitTime())); + assertThat(wrappedMco.getSocketTimeout(), equalTo(mco.getSocketTimeout())); + assertThat(wrappedMco.isSocketKeepAlive(), equalTo(mco.isSocketKeepAlive())); + assertThat(wrappedMco.getThreadsAllowedToBlockForConnectionMultiplier(), equalTo( + mco.getThreadsAllowedToBlockForConnectionMultiplier())); + assertThat(wrappedMco.getMinConnectionsPerHost(), equalTo(mco.getMinConnectionsPerHost())); + assertThat(wrappedMco.getMaxConnectionIdleTime(), equalTo(mco.getMaxConnectionIdleTime())); + assertThat(wrappedMco.getMaxConnectionLifeTime(), equalTo(mco.getMaxConnectionLifeTime())); + assertThat(wrappedMco.getHeartbeatFrequency(), equalTo(mco.getHeartbeatFrequency())); + assertThat(wrappedMco.getMinHeartbeatFrequency(), equalTo(mco.getMinHeartbeatFrequency())); + assertThat(wrappedMco.getHeartbeatConnectTimeout(), equalTo(mco.getHeartbeatConnectTimeout())); + assertThat(wrappedMco.getHeartbeatSocketTimeout(), equalTo(mco.getHeartbeatSocketTimeout())); + assertThat(wrappedMco.getLocalThreshold(), equalTo(mco.getLocalThreshold())); + assertThat(wrappedMco.getRequiredReplicaSetName(), equalTo(mco.getRequiredReplicaSetName())); + } + private void assertServerAddress(ServerAddress serverAddress, String expectedHost, int expectedPort) { assertThat(serverAddress.getHost(), equalTo(expectedHost));