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.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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables/disables 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:true")
|
||||||
|
.run((context) -> {
|
||||||
|
MongoMappingContext mappingContext = context
|
||||||
|
.getBean(MongoMappingContext.class);
|
||||||
|
assertThat(mappingContext.isAutoIndexCreation())
|
||||||
|
.isEqualTo(Boolean.TRUE);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@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…
Reference in New Issue