今天在启动项目的时候,idea控制台突然打印了The bean 'user.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.这样的错误,项目启动失败。我一脸懵逼,昨天启动的时候还好好的,怎么突然就启动不了了。百度后才发现,项目配置文件bootstrap.yml中的spring.main.allow-bean-definition-overriding=true配置不见了造成的。于是重新加上这个配置后,项目启动成功。

但是到底发生了什么事情,为什么需要加上这个配置,它到达有什么用,不加不行吗。带着这样的疑惑,我决定从网上找找答案。

须知
在Spring Boot 2.0.x 中,spring.main.allow-bean-definition-overriding属性默认是 true;
注解@FeignClient 没有contextId属性;

在Spring Boot 2.1.x 中,spring.main.allow-bean-definition-overriding属性默认是 false;
注解@FeignClient 有contextId属性;

Spring Boot 2.1.x 已经通过增加contextId属性来避免了bean重复定义的问题,记得给contextId赋值啊。

下面以Spring Boot 2.1.x版本来说明:

spring.main.allow-bean-definition-overriding

这个属性的意思是说如果项目中出现相同的bean命名,是否允许后面的bean覆盖前面的bean。Spring Boot 2.1.x默认配置的是false,说明当项目中出现相同的bean命名,则会报错。下面是源码说明:

即热spring中配置了

allowBeanDefinitionOverriding = true

但是为什么还需要在项目的配置文件中单独配置这个属性呢。那是因为SpringBoot对这个参数进行了二次封装,并使用了boolean的默认值false:

现在就解释了为什么需要在配置文件单独配置allowBeanDefinitionOverriding = true。

以上是xxx.FeignClientSpecification未定义的解决办法之一。下面从源码分析为什么会出现The bean 'user.FeignClientSpecification', defined in null的问题,还有没有其他的解决办法

首先定位项目中出现此问题的地方:

在项目的feign包中,所有的xxx.feign类中的@FeignClient,value都是user。就是这个配置导致xxx.FeignClientSpecification未定义的问题。

查看源码:

在使用了@FeignClient后,spring会根据该注解去生成bean。查看源码发现此处注册了一个bean,名字就是{name}.FeignClientSpecification。这个name是作为参数传进来的。查看这个方法的调用者:

继续查看getClientName()方法:

通过源码发现,@FeignClient有个contextId属性,当这个属性为空时,会把value或者name属性作为bean名称。而在我的项目中,@FeignClient的value属性都指定的是user,所以bean的名字冲突了,而项目中没有配置spring.main.allow-bean-definition-overriding=true,所以会报错。这就引出了另一个解决办法,那就是在@FeignClient中指定contextId,且contextId在项目中是唯一的。

@FeignClient(value = "user", contextId = "SysCarFeign")

现在有两种方案可以解决此问题,那究竟是配置spring.main.allow-bean-definition-overriding=true,还是在@FeignClient中指定contextId。对于这个问题,我没有进一步的查找资料,个人观点是在@FeignClient中指定contextId为好,因为这样会保证项目中所有的bean都能被Spring管理起来。而配置spring.main.allow-bean-definition-overriding=true会导致前面的bean被后面相同名字的bean覆盖,会产生很多意想不到的情况。

SpringBoot项目启动报xxx.FeignClientSpecification问题的原因及解决办法相关推荐

  1. idea软件 springboot项目启动报错:命令行太长解决

    idea软件 springboot项目启动报错:命令行太长解决 1.找到项目下得.idea文件夹,打开文件workspace.xml 2.搜索标签 <component name="P ...

  2. SpringBoot项目启动报错:Field userMapper in com.demo.controller.MemberController required a bean of type ‘c

    问题描述: SpringBoot项目启动报错,报错内容:'com.xxx.mapper.XxxxMapper' that could not be found ******************** ...

  3. SpringBoot项目启动 报错:Error executing Maven. end tag name </settings> must match start tag name

    SpringBoot项目启动 报错:Error executing Maven. end tag name must match start tag name from line xxx 第一次创建s ...

  4. DHCP服务启动报“bad subnet number/mask combination.”的解决办法

    DHCP服务启动报"bad subnet number/mask combination."的解决办法 自家的linux服务器上搭建DHCP服务在重启后出现报错,但是光看表面的原因 ...

  5. springboot项目启动报错-案例情景介绍

    文章目录 摘要 情况1:Nacos报错 情况2:IllegalStateException: Incompatible fallbackFactory instance 情况3:idea编译java文 ...

  6. 【图文详解】SpringBoot项目启动报错:The bean ‘xxxServiceImpl‘ could not be injected as a ‘xxxServiceImpl‘ ...

    问题描述: 项目启动报错:The bean 'xxxServiceImpl' could not be injected as a 'cn.xxxx.service.xxxServiceImpl' b ...

  7. 【踩坑日记】springboot项目启动报错error create bean with name

    前言 启动springboot项目报错error create bean with name xxx 以为是哪个bean没有装配上,排查了所有的bean,发现都装配了 原因分析 仔细看了报错日志,发现 ...

  8. SpringBoot项目启动报错,java.lang.IllegalStateException: Ambiguous mapping.访问路径模棱两可,无法映射的问题!!!

    问题描述: SpringBoot项目刚启动就报错 下面是报错信息: 我这里提取了一下关键信息 Ambiguous mapping.(模棱两可的mapping) Cannot map 'test' me ...

  9. springboot 项目启动报错 url' attribute is not specified and no embedded datasource could be configured

    报错信息: Error starting ApplicationContext. To display the conditions report re-run your application wi ...

最新文章

  1. python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame
  2. 排序算法(五):快速排序
  3. 使用@Transactional应注意的问题
  4. Breeze库API总结(Spark线性代数库)(转载)
  5. Oracle入门(十四.22)之创建DDL和数据库事件触发器
  6. 有一个3x4的矩阵,输出最大值,且输出对应的行和列;
  7. SAP License:SAP中的一些扩展表
  8. [NOIP2013D2]
  9. 什么是CMMI认证?
  10. NR接入过程中鉴权失败问题
  11. css 平移到某个位置_css怎么移图片位置?
  12. [bzoj3202] [SDOI2013]项链
  13. Cocos Creator 微信小游戏排行榜
  14. 22. 案例:在 proxy 内网环境下使用 percona 监控 mysql
  15. 计算机和人脑在线阅读,人脑与电脑(原文)
  16. 如何设计并实现传统小区智能化
  17. PE中Ghost 使用详解
  18. img图片加载失败时的处理
  19. 西门子实数转整数_西门子PLC双整数转换为浮点数是怎么转换的???
  20. 如何解决百度网盘下载速度慢的问题

热门文章

  1. 利用计算机模型进行快速模拟和预测,数学模型在生物信息学优秀教学中应用.doc...
  2. van Emde Boas树实现
  3. uniapp 导航栏图标添加步骤
  4. 引领可穿戴显示革命:华米科技Amazfit年度旗舰发布
  5. 基于ARM平台下的GPRS/CQT测试系统设计研究
  6. 软件测试的分类 xmind 整理 留存
  7. 逻辑调试器link-logic
  8. docker基础命令操作
  9. JS获取网页 < 变成 /u003C
  10. 流氓软件“拉法日历”近期活跃 多数来自下载站