irpas技术客

解决The bean ‘dataSource‘, defined in BeanDefinition defined in class path resourc

网络 3083

前言

今天在启动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/DataSourceConfiguration H i k a r i . c l a s s ] , c o u l d n o t b e r e g i s t e r e d . A b e a n w i t h t h a t n a m e h a s a l r e a d y b e e n d e f i n e d i n c l a s s p a t h r e s o u r c e [ o r g / s p r i n g f r a m e w o r k / b o o t / a u t o c o n f i g u r e / j d b c / D a t a S o u r c e C o n f i g u r a t i o n Hikari.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration Hikari.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被覆盖。

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #bean #datasource #如下错误Error #starting #To #display