Has anyone tried disabling autoconfiguration for mongodb in spring-boot?
I am trying out spring-boot with spring-data-mongodb; Using java based configuration; Using
Try to Run application in Debug mode. It happens when MongoDB dependant configaration is trying to instantiate but respective bean not present. In My case I have excluded MongoDataAutoConfiguration.class and MongoRepositoriesAutoConfiguration.class, to get the application run.
@SpringBootApplication
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoRepositoriesAutoConfiguration .class,MongoDataAutoConfiguration.class})
public class SomeApplication {
//...
}
As pointed out by Andy Wilkinson in comments, when using EnableAutoConfiguration with exclude list make sure there are no other classes annotated with EnableAutoConfiguration or SpringBootApplication.
This is how I do it:
@SpringBootApplication(exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class
})
or as suggested by Dan Oak:
spring.autoconfigure.exclude= \
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
Same as https://stackoverflow.com/a/45929916/5213837 with https://stackoverflow.com/a/49980868/5213837, Spring boot 2.3/Kotlin
@SpringBootApplication(exclude = [MongoAutoConfiguration::class, MongoDataAutoConfiguration::class]
@Profile("mongo")
@Configuration
class CustomMongoAutoConfiguration: MongoAutoConfiguration() {
override fun mongo(
properties: MongoProperties?,
environment: Environment?,
builderCustomizers: ObjectProvider<MongoClientSettingsBuilderCustomizer>?,
settings: ObjectProvider<MongoClientSettings>?
): MongoClient {
return super.mongo(properties, environment, builderCustomizers, settings)
}
}
@Profile("mongo")
@Configuration
@EnableConfigurationProperties(MongoProperties::class)
class CustomMongoDataAutoConfiguration : MongoDataAutoConfiguration()
Spring Boot 2.3.x:
spring.autoconfigure.exclude[0]: org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
spring.autoconfigure.exclude[1]: org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration
Reactive:
spring.autoconfigure.exclude[0]: org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration
spring.autoconfigure.exclude[1]: org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration
My use case was slightly different. I had a requirement for 2 different databases in the same project. I extended the auto configuration classes and added a profile annotation.
@Profile("mongo")
@Configuration
public class CustomMongoAutoConfiguration extends MongoAutoConfiguration {
public CustomMongoAutoConfiguration(
MongoProperties properties,
ObjectProvider<MongoClientOptions> options,
Environment environment) {
super(properties,options,environment);
}
}
And
@Profile("mongo")
@Configuration
@EnableConfigurationProperties(MongoProperties.class)
public class CustomMongoDataAutoConfiguration extends MongoDataAutoConfiguration {
public CustomMongoDataAutoConfiguration(
ApplicationContext applicationContext,
MongoProperties properties) {
super(applicationContext,properties);
}
}