在Spring Boot 2.1中重写DataSource bean
我已升级到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
并且在我的应用程序属性中,我已将数据源类型设置为:
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版本。
以上是 在Spring Boot 2.1中重写DataSource bean 的全部内容, 来源链接: utcz.com/qa/428695.html