我已升级到Spring Boot 2.1版本,启动应用程序时遇到了奇怪的异常。
无法注册在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中定义的BeanDefinition中定义的bean’dataSource’。具有该名称的Bean已在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中定义,并且禁止覆盖。
完整的错误消息是:
[osbwscAnnotationConfigServletWebServerApplicationContext]上下文初始化期间遇到异常- 取消刷新尝试:org.springframework.beans.factory.support.BeanDefinitionOverrideException:无效的bean定义,在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]:无法注册bean定义[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; 在bean的“数据源”的类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中定义的BeanDefinition中定义:已经存在[Root bean:class [null]; 范围=刷新; 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 =(推断); 定义在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中。springframework.boot.autoconfigure.jdbc.DataSourceConfiguration $ Hikari; factoryMethodName = dataSource; initMethodName = null; destroyMethodName =(推断); 定义在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中。springframework.boot.autoconfigure.jdbc.DataSourceConfiguration $ Hikari; factoryMethodName = dataSource; initMethodName = null; destroyMethodName =(推断); 定义在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中。
不得根据我们的政策来覆盖Bean,并通过以下方式禁用它:
spring.main.allow-bean-definition-overriding=false
我的应用程序代码中没有任何数据源配置。触发此错误的唯一选项是,@EnableAutoConfiguration并且在我的应用程序属性中,我已将数据源类型设置为:
@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)之前没有发生过。
今天,我遇到了类似的问题,随后的spring云配置问题对我有所帮助: 问题1142。
到目前为止,我们正在使用与Spring Boot 2.1.0不兼容的Spring Cloud Config。Spring Cloud的格林威治发布系列将与Spring Boot 2.1.0兼容。
您的@EnableCircuitBreaker注释使我相信您可能还会使用与Spring Boot 2.1.0发行版不兼容的Spring Cloud版本。
@EnableCircuitBreaker