Allow Mongo database property to override database in URI
This commit restores the previous behavior of MongoDB auto- configuration, where the value of the `spring.data.mongodb.database` property takes precedence over the database specified in a `spring.data.mongodb.uri` property. Fixes gh-35566
This commit is contained in:
@@ -64,6 +64,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class MongoDataAutoConfigurationTests {
|
||||
|
||||
@@ -226,6 +227,64 @@ class MongoDataAutoConfigurationTests {
|
||||
.run((context) -> assertThat(context).hasSingleBean(MongoTemplate.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void databaseHasDefault() {
|
||||
this.contextRunner.run((context) -> {
|
||||
MongoDatabaseFactory factory = context.getBean(MongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleMongoClientDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().getName()).isEqualTo("test");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databasePropertyIsUsed() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.database=mydb").run((context) -> {
|
||||
MongoDatabaseFactory factory = context.getBean(MongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleMongoClientDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databaseInUriPropertyIsUsed() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/mydb")
|
||||
.run((context) -> {
|
||||
MongoDatabaseFactory factory = context.getBean(MongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleMongoClientDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databasePropertyOverridesUriProperty() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/notused",
|
||||
"spring.data.mongodb.database=mydb")
|
||||
.run((context) -> {
|
||||
MongoDatabaseFactory factory = context.getBean(MongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleMongoClientDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databasePropertyIsUsedWhenNoDatabaseInUri() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/",
|
||||
"spring.data.mongodb.database=mydb")
|
||||
.run((context) -> {
|
||||
MongoDatabaseFactory factory = context.getBean(MongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleMongoClientDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void contextFailsWhenDatabaseNotSet() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/")
|
||||
.run((context) -> assertThat(context).getFailure().hasMessageContaining("Database name must not be empty"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void definesPropertiesBasedConnectionDetailsByDefault() {
|
||||
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(PropertiesMongoConnectionDetails.class));
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.mongodb.ReactiveMongoDatabaseFactory;
|
||||
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
|
||||
import org.springframework.data.mongodb.core.SimpleReactiveMongoDatabaseFactory;
|
||||
import org.springframework.data.mongodb.gridfs.ReactiveGridFsTemplate;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
@@ -42,6 +43,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class MongoReactiveDataAutoConfigurationTests {
|
||||
|
||||
@@ -90,6 +92,64 @@ class MongoReactiveDataAutoConfigurationTests {
|
||||
runner.run((context) -> assertThat(context).doesNotHaveBean(MongoReactiveDataAutoConfiguration.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void databaseHasDefault() {
|
||||
this.contextRunner.run((context) -> {
|
||||
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("test");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databasePropertyIsUsed() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.database=mydb").run((context) -> {
|
||||
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databaseInUriPropertyIsUsed() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/mydb")
|
||||
.run((context) -> {
|
||||
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databasePropertyOverridesUriProperty() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/notused",
|
||||
"spring.data.mongodb.database=mydb")
|
||||
.run((context) -> {
|
||||
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void databasePropertyIsUsedWhenNoDatabaseInUri() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/",
|
||||
"spring.data.mongodb.database=mydb")
|
||||
.run((context) -> {
|
||||
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
|
||||
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void contextFailsWhenDatabaseNotSet() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.uri=mongodb://mongo.example.com/")
|
||||
.run((context) -> assertThat(context).getFailure().hasMessageContaining("Database name must not be empty"));
|
||||
}
|
||||
|
||||
private String grisFsTemplateDatabaseName(AssertableApplicationContext context) {
|
||||
assertThat(context).hasSingleBean(ReactiveGridFsTemplate.class);
|
||||
ReactiveGridFsTemplate template = context.getBean(ReactiveGridFsTemplate.class);
|
||||
|
||||
Reference in New Issue
Block a user