在Spring Boot 2.1中覆盖DataSource bean
在Spring Boot 2.1中覆盖DataSource bean
我已经升级到Spring Boot 2.1版本,并且在启动应用程序时遇到了奇怪的异常。
完整的错误信息如下:
[o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext] 在初始化上下文期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.support.BeanDefinitionOverrideException:在类路径资源[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]中定义的Bean“dataSource”无法注册。在类路径资源[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]中已经定义了具有该名称的Bean,并且禁用了覆盖。
根据我们的策略,不允许覆盖Bean,并且已禁用覆盖功能:
spring.main.allow-bean-definition-overriding=false
在我的应用程序代码中没有任何数据源配置。唯一会触发此错误的选项是@EnableAutoConfiguration,并且在我的应用程序属性中将数据源类型设置为:
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
引导应用程序是用以下方式初始化的:
@SpringBootApplication
@EnableAutoConfiguration
public class MyApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
new MyApplication()
.configure(new SpringApplicationBuilder(MyApplication.class))
.run(args);
}
}
还有一个配置类,导入了各种其他配置:
@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 {
...
}
有人知道是什么原因导致这个问题,应该在哪里搜索吗?在Spring Boot 2.1之前(即2.0.5)没有出现这个问题。