我已经升级到 spring boot 2.1 版本,启动应用程序时出现奇怪的异常。
无法注册在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] 中定义的 BeanDefinition 中定义的 bean“dataSource”。具有该名称的 bean 已在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] 中定义,并且覆盖被禁用。
完整的错误消息是:
[o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext] 上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.support.BeanDefinitionOverrideException:在类路径资源 [org/springframework/boot/autoconfigure 中定义的 BeanDefinition 中定义的名称为“dataSource”的无效 bean 定义/jdbc/DataSourceConfiguration$Hikari.class]:无法注册bean定义[根bean:类[org.springframework.aop.scope.ScopedProxyFactoryBean];范围=;摘要=假;惰性初始化=假;自动连线模式=0;依赖检查=0; autowireCandidate = true;主要=假;工厂BeanName=null;工厂方法名称=null; initMethodName=null;销毁方法名称=null;在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] 中为 bean 'dataSource' 定义的 BeanDefinition 中定义:已经存在 [Root bean: class [null];范围=刷新;摘要=假;惰性初始化=假;自动连线模式=3;依赖检查=0; autowireCandidate=假;主要=假; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari;工厂方法名称=数据源; initMethodName=null; destroyMethodName=(推断);在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] 绑定中定义。
根据我们的政策,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)之前并没有发生这种情况。