I have upgraded to spring boot 2.1 release and I have got strange exception when starting up the application.
The bean 'dataSource', defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] and overriding is disabled.
The full error message is:
[o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'dataSource' defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Cannot register bean definition [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] for bean 'dataSource': There is already [Root bean: class [null]; scope=refresh; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] bound.
Beans must not be overridden according to our policy and it's disabled with:
spring.main.allow-bean-definition-overriding=false
I don't have any data source configuration in my application code. The only option that triggers this error is @EnableAutoConfiguration
and in my application properties I have set the data source type to:
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
The boot application is initialized with
@SpringBootApplication
@EnableAutoConfiguration
public class MyApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
new MyApplication()
.configure(new SpringApplicationBuilder(MyApplication.class))
.run(args);
}
}
There is also configuration class that imports various other configurations:
@Configuration
@ImportResource(locations = {
"classpath*:conf/spring/*.xml",
"classpath*:conf/spring/core/*.xml",
"classpath*:conf/spring/plugin/**/*.xml"
})
@EnableAsync
@EnableRetry
@EnableCaching
@EnableBatchProcessing
@EnableCircuitBreaker
public class AppConfig {
...
}
Does anyone knows what could cause that issue and where to search?
It didn't happened prior to Spring Boot 2.1 (i.e. 2.0.5).
spring.main.allow-bean-definition-overriding=false
is the default. Could you add the full stack trace and add your@SpringBootApplication
annotated class? – M. Deinum@EnableAutoConfiguration
that is already implied by@SpringBootApplication
. Also your setup is a bit strange, why extend theSpringBootServletInitializer
without implementing the correct methods? and what you do in your main method is also not standard just useSpringApplication.run(MyuApplication.class, args);
instead of what you have now. – M. Deinum