Skip to content

Commit 2e9005d

Browse files
ayudovinmbhave
authored andcommitted
Add property to configure Mongo auto index creation
Closes gh-16454
1 parent 0826038 commit 2e9005d

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/MongoDataConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2222
import org.springframework.boot.autoconfigure.domain.EntityScanner;
2323
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
24+
import org.springframework.boot.context.properties.PropertyMapper;
2425
import org.springframework.context.ApplicationContext;
2526
import org.springframework.context.annotation.Bean;
2627
import org.springframework.context.annotation.Configuration;
@@ -34,6 +35,7 @@
3435
* Base configuration class for Spring Data's mongo support.
3536
*
3637
* @author Madhura Bhave
38+
* @author Artsiom Yudovin
3739
*/
3840
@Configuration(proxyBeanMethods = false)
3941
class MongoDataConfiguration {
@@ -43,7 +45,9 @@ class MongoDataConfiguration {
4345
public MongoMappingContext mongoMappingContext(ApplicationContext applicationContext,
4446
MongoProperties properties, MongoCustomConversions conversions)
4547
throws ClassNotFoundException {
48+
PropertyMapper mapper = PropertyMapper.get().alwaysApplyingWhenNonNull();
4649
MongoMappingContext context = new MongoMappingContext();
50+
mapper.from(properties.isAutoIndexCreation()).to(context::setAutoIndexCreation);
4751
context.setInitialEntitySet(new EntityScanner(applicationContext)
4852
.scan(Document.class, Persistent.class));
4953
Class<?> strategyClass = properties.getFieldNamingStrategy();

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
* @author Stephane Nicoll
3232
* @author Nasko Vasilev
3333
* @author Mark Paluch
34+
* @author Artsiom Yudovin
3435
*/
3536
@ConfigurationProperties(prefix = "spring.data.mongodb")
3637
public class MongoProperties {
@@ -90,6 +91,11 @@ public class MongoProperties {
9091
*/
9192
private Class<?> fieldNamingStrategy;
9293

94+
/**
95+
* Enables/disables auto-index creation.
96+
*/
97+
private Boolean autoIndexCreation;
98+
9399
public String getHost() {
94100
return this.host;
95101
}
@@ -173,4 +179,12 @@ public String getMongoClientDatabase() {
173179
return new MongoClientURI(determineUri()).getDatabase();
174180
}
175181

182+
public Boolean isAutoIndexCreation() {
183+
return this.autoIndexCreation;
184+
}
185+
186+
public void setAutoIndexCreation(Boolean autoIndexCreation) {
187+
this.autoIndexCreation = autoIndexCreation;
188+
}
189+
176190
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/mongo/MongoDataAutoConfigurationTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@ public void customFieldNamingStrategy() {
132132
});
133133
}
134134

135+
@Test
136+
public void customAutoIndexCreation() {
137+
this.contextRunner
138+
.withPropertyValues("spring.data.mongodb.autoIndexCreation:true")
139+
.run((context) -> {
140+
MongoMappingContext mappingContext = context
141+
.getBean(MongoMappingContext.class);
142+
assertThat(mappingContext.isAutoIndexCreation())
143+
.isEqualTo(Boolean.TRUE);
144+
});
145+
}
146+
135147
@Test
136148
public void interfaceFieldNamingStrategy() {
137149
this.contextRunner

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* @author Andy Wilkinson
3838
* @author Stephane Nicoll
3939
* @author Mark Paluch
40+
* @author Artsiom Yudovin
4041
*/
4142
public class MongoPropertiesTests {
4243

@@ -155,6 +156,17 @@ public void noCustomAddressAndNoUriUsesDefaultUri() {
155156
assertServerAddress(allAddresses.get(0), "localhost", 27017);
156157
}
157158

159+
@Test
160+
public void canBindAutoIndexCreation() {
161+
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
162+
TestPropertyValues.of("spring.data.mongodb.autoIndexCreation:true")
163+
.applyTo(context);
164+
context.register(Config.class);
165+
context.refresh();
166+
MongoProperties properties = context.getBean(MongoProperties.class);
167+
assertThat(properties.isAutoIndexCreation()).isEqualTo(Boolean.TRUE);
168+
}
169+
158170
private void assertServerAddress(ServerAddress serverAddress, String expectedHost,
159171
int expectedPort) {
160172
assertThat(serverAddress.getHost()).isEqualTo(expectedHost);

0 commit comments

Comments
 (0)