前言

今天在启动springboot+springcloud项目的时候,发现报一个错误 如下错误

Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.
2020-09-17 16:34:52.056 ERROR 19128 — [ main] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

The bean ‘dataSource’, defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfigurationHikari.class],couldnotberegistered.Abeanwiththatnamehasalreadybeendefinedinclasspathresource[org/springframework/boot/autoconfigure/jdbc/DataSourceConfigurationHikari.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfigurationHikari.class],couldnotberegistered.Abeanwiththatnamehasalreadybeendefinedinclasspathresource[org/springframework/boot/autoconfigure/jdbc/DataSourceConfigurationHikari.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

Disconnected from the target VM, address: ‘127.0.0.1:62029’, transport: ‘socket’

Process finished with exit code 1

从错误信息中可以看到,dataSource这个bean已经被register了

解决方案

从下图看:
在这里插入图片描述
只要在配置文件中加入

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

设置为true时,后定义的bean会覆盖之前定义的相同名称的bean,如图
在这里插入图片描述

根本原因分析

我们分析根本原因,发现上面解决方案不是根本原因,终究原因后面发现是SpringBoot和SpringCloud版本匹配问题导致的。

  • 问题前版本号为
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
  • 解决后版本为
<spring-boot.version>2.0.4.RELEASE</spring-boot.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

把版本降下来后,问题自然解决了,这才是推荐方案,从根本上解决

写在最后

所以,我们在技术选型时,不用一味的追求最新的,要考虑到各组件的兼容性,选择最合适的,才是最好的。

最后提醒一下:

spring中默认是true,也就是默认支持名称相同的bean的覆盖。而springboot中的默认值是false,也就是不支持名称相同的bean被覆盖。

如果能帮到您,记得关注一下哈

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐