DataSource bean 在 spring boot 2.1 中覆盖

新手上路,请多包涵

我已经升级到 spring boot 2.1 版本,启动应用程序时出现奇怪的异常。

无法注册在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration\(Hikari.class\] 中定义的 BeanDefinition 中定义的 bean“dataSource”。已经在类路径资源 \[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration\)Hikari.class] 中定义了具有该名称的 bean,并且禁用了覆盖。

完整的错误信息是:

[osbwscAnnotationConfigServletWebServerApplicationContext] 上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.support.BeanDefinitionOverrideException:在类路径资源 [org/springframework/boot/autoconfigure/ jdbc/DataSourceConfiguration\(Hikari.class\]:无法注册 bean 定义 \[根 bean:类 \[org.springframework.aop.scope.ScopedProxyFactoryBean\];范围=;摘要=假;懒惰初始化=假;自动接线模式=0;依赖检查=0; autowireCandidate=真;初级=假;工厂BeanName=null;工厂方法名=空;初始化方法名=空; destroyMethodName=null;在类路径资源 \[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration\)Hikari.class]] 中为 bean ‘dataSource’ 定义的 BeanDefinition 中定义:已经存在 [Root bean: class [null];范围=刷新;摘要=假;懒惰初始化=假;自动接线模式=3;依赖检查=0; autowireCandidate=false;初级=假; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration\(Hikari;工厂方法名=数据源;初始化方法名=空; 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)之前没有发生。

原文由 Mariusz Miesiak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 541
2 个回答

我今天遇到了类似的问题,以下 spring cloud config 问题帮助了我: Issue 1142

我们使用的 Spring Cloud Config 目前还与 Spring Boot 2.1.0 不兼容。 Spring Cloud 的 Greenwich 发布系列将与 Spring Boot 2.1.0 兼容。

你的 @EnableCircuitBreaker 注释让我相信你可能也在使用与 Spring Boot 2.1.0 版本不兼容的 Spring Cloud 版本。

原文由 Brad Fontaine 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 application.properties 中添加以下属性可以解决问题。

spring.main.allow-bean-definition-overriding=true

此外,可能需要添加另一个属性来解决提到的另一个问题: https ://github.com/openzipkin/zipkin/issues/2043

management.metrics.web.server.auto-time-requests=false

原文由 Rahul 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题