Merge branch '1.5.x'

pull/7081/merge
Stephane Nicoll 8 years ago
commit f181421f67

@ -50,20 +50,22 @@ public class MongoProperties {
*/ */
public static final int DEFAULT_PORT = 27017; public static final int DEFAULT_PORT = 27017;
public static final String DEFAULT_URI = "mongodb://localhost/test";
/** /**
* Mongo server host. * Mongo server host. Cannot be set with uri.
*/ */
private String host; private String host;
/** /**
* Mongo server port. * Mongo server port. Cannot be set with uri.
*/ */
private Integer port = null; private Integer port = null;
/** /**
* Mongo database URI. When set, host and port are ignored. * Mongo database URI. Cannot be set with host, port and credentials.
*/ */
private String uri = "mongodb://localhost/test"; private String uri;
/** /**
* Database name. * Database name.
@ -81,12 +83,12 @@ public class MongoProperties {
private String gridFsDatabase; private String gridFsDatabase;
/** /**
* Login user of the mongo server. * Login user of the mongo server. Cannot be set with uri.
*/ */
private String username; private String username;
/** /**
* Login password of the mongo server. * Login password of the mongo server. Cannot be set with uri.
*/ */
private char[] password; private char[] password;
@ -156,6 +158,10 @@ public class MongoProperties {
return this.uri; return this.uri;
} }
public String determineUri() {
return (this.uri != null ? this.uri : DEFAULT_URI);
}
public void setUri(String uri) { public void setUri(String uri) {
this.uri = uri; this.uri = uri;
} }
@ -180,7 +186,7 @@ public class MongoProperties {
if (this.database != null) { if (this.database != null) {
return this.database; return this.database;
} }
return new MongoClientURI(this.uri).getDatabase(); return new MongoClientURI(determineUri()).getDatabase();
} }
/** /**
@ -198,6 +204,10 @@ public class MongoProperties {
Environment environment) throws UnknownHostException { Environment environment) throws UnknownHostException {
try { try {
if (hasCustomAddress() || hasCustomCredentials()) { if (hasCustomAddress() || hasCustomCredentials()) {
if (this.uri != null) {
throw new IllegalStateException("Invalid mongo configuration, " +
"either uri or host/port/credentials must be specified");
}
if (options == null) { if (options == null) {
options = MongoClientOptions.builder().build(); options = MongoClientOptions.builder().build();
} }
@ -215,7 +225,7 @@ public class MongoProperties {
credentials, options); credentials, options);
} }
// The options and credentials are in the URI // The options and credentials are in the URI
return new MongoClient(new MongoClientURI(this.uri, builder(options))); return new MongoClient(new MongoClientURI(determineUri(), builder(options)));
} }
finally { finally {
clearPassword(); clearPassword();

@ -25,7 +25,9 @@ import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress; import com.mongodb.ServerAddress;
import com.mongodb.connection.Cluster; import com.mongodb.connection.Cluster;
import com.mongodb.connection.ClusterSettings; import com.mongodb.connection.ClusterSettings;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.boot.test.util.EnvironmentTestUtils;
@ -40,9 +42,13 @@ import static org.assertj.core.api.Assertions.assertThat;
* *
* @author Phillip Webb * @author Phillip Webb
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Stephane Nicoll
*/ */
public class MongoPropertiesTests { public class MongoPropertiesTests {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test @Test
public void canBindCharArrayPassword() { public void canBindCharArrayPassword() {
// gh-1572 // gh-1572
@ -121,6 +127,30 @@ public class MongoPropertiesTests {
assertMongoCredential(credentialsList.get(0), "user", "secret", "test"); assertMongoCredential(credentialsList.get(0), "user", "secret", "test");
} }
@Test
public void uriCannotBeSetWithCredentials() throws UnknownHostException {
MongoProperties properties = new MongoProperties();
properties.setUri("mongodb://127.0.0.1:1234/mydb");
properties.setUsername("user");
properties.setPassword("secret".toCharArray());
this.thrown.expect(IllegalStateException.class);
this.thrown.expectMessage("Invalid mongo configuration, " +
"either uri or host/port/credentials must be specified");
properties.createMongoClient(null, null);
}
@Test
public void uriCannotBeSetWithHostPort() throws UnknownHostException {
MongoProperties properties = new MongoProperties();
properties.setUri("mongodb://127.0.0.1:1234/mydb");
properties.setHost("localhost");
properties.setPort(4567);
this.thrown.expect(IllegalStateException.class);
this.thrown.expectMessage("Invalid mongo configuration, " +
"either uri or host/port/credentials must be specified");
properties.createMongoClient(null, null);
}
@Test @Test
public void allMongoClientOptionsCanBeSet() throws UnknownHostException { public void allMongoClientOptionsCanBeSet() throws UnknownHostException {
MongoClientOptions.Builder builder = MongoClientOptions.builder(); MongoClientOptions.Builder builder = MongoClientOptions.builder();

@ -553,12 +553,12 @@ content into your application; rather pick only the properties that you need.
spring.data.mongodb.database=test # Database name. spring.data.mongodb.database=test # Database name.
spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use. spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
spring.data.mongodb.grid-fs-database= # GridFS database name. spring.data.mongodb.grid-fs-database= # GridFS database name.
spring.data.mongodb.host=localhost # Mongo server host. spring.data.mongodb.host=localhost # Mongo server host. Cannot be set with uri.
spring.data.mongodb.password= # Login password of the mongo server. spring.data.mongodb.password= # Login password of the mongo server. Cannot be set with uri.
spring.data.mongodb.port=27017 # Mongo server port. spring.data.mongodb.port=27017 # Mongo server port. Cannot be set with uri.
spring.data.mongodb.repositories.enabled=true # Enable Mongo repositories. spring.data.mongodb.repositories.enabled=true # Enable Mongo repositories.
spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. When set, host and port are ignored. spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. Cannot be set with host, port and credentials.
spring.data.mongodb.username= # Login user of the mongo server. spring.data.mongodb.username= # Login user of the mongo server. Cannot be set with uri.
# DATA REDIS # DATA REDIS
spring.data.redis.repositories.enabled=true # Enable Redis repositories. spring.data.redis.repositories.enabled=true # Enable Redis repositories.

Loading…
Cancel
Save