Merge pull request #16454 from ayudovin

* pr/16454:
  Polish "Add property for mongo auto-index creation"
  Add property to configure Mongo auto index creation
pull/16575/head
Madhura Bhave 6 years ago
commit f206613b85

@ -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;
* 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 {
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;
* @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 {
*/ */
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 {
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 {
}); });
} }
@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;
* @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 {
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);

Loading…
Cancel
Save