在Spring Boot 2.1中覆盖DataSource bean

11 浏览
0 Comments

在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)没有出现这个问题。

0