在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

回到顶部