Commit f206613b authored by Madhura Bhave's avatar Madhura Bhave

Merge pull request #16454 from ayudovin

* pr/16454:
  Polish "Add property for mongo auto-index creation"
  Add property to configure Mongo auto index creation
parents 08260388 bf6f9b4c
...@@ -21,6 +21,7 @@ import org.springframework.beans.BeanUtils; ...@@ -21,6 +21,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.domain.EntityScanner; import org.springframework.boot.autoconfigure.domain.EntityScanner;
import org.springframework.boot.autoconfigure.mongo.MongoProperties; import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -34,6 +35,7 @@ import org.springframework.data.mongodb.core.mapping.MongoMappingContext; ...@@ -34,6 +35,7 @@ import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
* Base configuration class for Spring Data's mongo support. * Base configuration class for Spring Data's mongo support.
* *
* @author Madhura Bhave * @author Madhura Bhave
* @author Artsiom Yudovin
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
class MongoDataConfiguration { class MongoDataConfiguration {
...@@ -43,7 +45,9 @@ class MongoDataConfiguration { ...@@ -43,7 +45,9 @@ class MongoDataConfiguration {
public MongoMappingContext mongoMappingContext(ApplicationContext applicationContext, public MongoMappingContext mongoMappingContext(ApplicationContext applicationContext,
MongoProperties properties, MongoCustomConversions conversions) MongoProperties properties, MongoCustomConversions conversions)
throws ClassNotFoundException { throws ClassNotFoundException {
PropertyMapper mapper = PropertyMapper.get().alwaysApplyingWhenNonNull();
MongoMappingContext context = new MongoMappingContext(); MongoMappingContext context = new MongoMappingContext();
mapper.from(properties.isAutoIndexCreation()).to(context::setAutoIndexCreation);
context.setInitialEntitySet(new EntityScanner(applicationContext) context.setInitialEntitySet(new EntityScanner(applicationContext)
.scan(Document.class, Persistent.class)); .scan(Document.class, Persistent.class));
Class<?> strategyClass = properties.getFieldNamingStrategy(); Class<?> strategyClass = properties.getFieldNamingStrategy();
......
...@@ -31,6 +31,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; ...@@ -31,6 +31,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Nasko Vasilev * @author Nasko Vasilev
* @author Mark Paluch * @author Mark Paluch
* @author Artsiom Yudovin
*/ */
@ConfigurationProperties(prefix = "spring.data.mongodb") @ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoProperties { public class MongoProperties {
...@@ -90,6 +91,11 @@ public class MongoProperties { ...@@ -90,6 +91,11 @@ public class MongoProperties {
*/ */
private Class<?> fieldNamingStrategy; private Class<?> fieldNamingStrategy;
/**
* Whether to enable auto-index creation.
*/
private Boolean autoIndexCreation;
public String getHost() { public String getHost() {
return this.host; return this.host;
} }
...@@ -173,4 +179,12 @@ public class MongoProperties { ...@@ -173,4 +179,12 @@ public class MongoProperties {
return new MongoClientURI(determineUri()).getDatabase(); return new MongoClientURI(determineUri()).getDatabase();
} }
public Boolean isAutoIndexCreation() {
return this.autoIndexCreation;
}
public void setAutoIndexCreation(Boolean autoIndexCreation) {
this.autoIndexCreation = autoIndexCreation;
}
} }
...@@ -132,6 +132,18 @@ public class MongoDataAutoConfigurationTests { ...@@ -132,6 +132,18 @@ public class MongoDataAutoConfigurationTests {
}); });
} }
@Test
public void customAutoIndexCreation() {
this.contextRunner
.withPropertyValues("spring.data.mongodb.autoIndexCreation:false")
.run((context) -> {
MongoMappingContext mappingContext = context
.getBean(MongoMappingContext.class);
assertThat(mappingContext.isAutoIndexCreation())
.isEqualTo(Boolean.FALSE);
});
}
@Test @Test
public void interfaceFieldNamingStrategy() { public void interfaceFieldNamingStrategy() {
this.contextRunner this.contextRunner
......
...@@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; ...@@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Mark Paluch * @author Mark Paluch
* @author Artsiom Yudovin
*/ */
public class MongoPropertiesTests { public class MongoPropertiesTests {
...@@ -155,6 +156,17 @@ public class MongoPropertiesTests { ...@@ -155,6 +156,17 @@ public class MongoPropertiesTests {
assertServerAddress(allAddresses.get(0), "localhost", 27017); assertServerAddress(allAddresses.get(0), "localhost", 27017);
} }
@Test
public void canBindAutoIndexCreation() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
TestPropertyValues.of("spring.data.mongodb.autoIndexCreation:true")
.applyTo(context);
context.register(Config.class);
context.refresh();
MongoProperties properties = context.getBean(MongoProperties.class);
assertThat(properties.isAutoIndexCreation()).isEqualTo(Boolean.TRUE);
}
private void assertServerAddress(ServerAddress serverAddress, String expectedHost, private void assertServerAddress(ServerAddress serverAddress, String expectedHost,
int expectedPort) { int expectedPort) {
assertThat(serverAddress.getHost()).isEqualTo(expectedHost); assertThat(serverAddress.getHost()).isEqualTo(expectedHost);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment