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