Add property to configure Mongo auto index creation
Closes gh-16454
This commit is contained in:
parent
08260388bf
commit
2e9005de14
|
@ -21,6 +21,7 @@ import org.springframework.beans.BeanUtils;
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.domain.EntityScanner;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
|
||||
import org.springframework.boot.context.properties.PropertyMapper;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
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.
|
||||
*
|
||||
* @author Madhura Bhave
|
||||
* @author Artsiom Yudovin
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
class MongoDataConfiguration {
|
||||
|
@ -43,7 +45,9 @@ class MongoDataConfiguration {
|
|||
public MongoMappingContext mongoMappingContext(ApplicationContext applicationContext,
|
||||
MongoProperties properties, MongoCustomConversions conversions)
|
||||
throws ClassNotFoundException {
|
||||
PropertyMapper mapper = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
MongoMappingContext context = new MongoMappingContext();
|
||||
mapper.from(properties.isAutoIndexCreation()).to(context::setAutoIndexCreation);
|
||||
context.setInitialEntitySet(new EntityScanner(applicationContext)
|
||||
.scan(Document.class, Persistent.class));
|
||||
Class<?> strategyClass = properties.getFieldNamingStrategy();
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||
* @author Stephane Nicoll
|
||||
* @author Nasko Vasilev
|
||||
* @author Mark Paluch
|
||||
* @author Artsiom Yudovin
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "spring.data.mongodb")
|
||||
public class MongoProperties {
|
||||
|
@ -90,6 +91,11 @@ public class MongoProperties {
|
|||
*/
|
||||
private Class<?> fieldNamingStrategy;
|
||||
|
||||
/**
|
||||
* Enables/disables auto-index creation.
|
||||
*/
|
||||
private Boolean autoIndexCreation;
|
||||
|
||||
public String getHost() {
|
||||
return this.host;
|
||||
}
|
||||
|
@ -173,4 +179,12 @@ public class MongoProperties {
|
|||
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:true")
|
||||
.run((context) -> {
|
||||
MongoMappingContext mappingContext = context
|
||||
.getBean(MongoMappingContext.class);
|
||||
assertThat(mappingContext.isAutoIndexCreation())
|
||||
.isEqualTo(Boolean.TRUE);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void interfaceFieldNamingStrategy() {
|
||||
this.contextRunner
|
||||
|
|
|
@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
* @author Andy Wilkinson
|
||||
* @author Stephane Nicoll
|
||||
* @author Mark Paluch
|
||||
* @author Artsiom Yudovin
|
||||
*/
|
||||
public class MongoPropertiesTests {
|
||||
|
||||
|
@ -155,6 +156,17 @@ public class MongoPropertiesTests {
|
|||
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,
|
||||
int expectedPort) {
|
||||
assertThat(serverAddress.getHost()).isEqualTo(expectedHost);
|
||||
|
|
Loading…
Reference in New Issue