iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何解决springboot-启动bean冲突问题
  • 353
分享到

如何解决springboot-启动bean冲突问题

2023-06-29 15:06:11 353人浏览 安东尼
摘要

小编给大家分享一下如何解决SpringBoot-启动bean冲突问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!启动bean冲突在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的beanorg.springfr

小编给大家分享一下如何解决SpringBoot-启动bean冲突问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

启动bean冲突

在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的bean

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.test.api.Application]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'healthCheckController' for bean class [com.test.datahub.controller.HealthCheckController] conflicts with existing, non-compatible bean definition of same name and class [com.test.api.controller.HealthCheckController]

项目中包括多个模块,其中A、B两个模块都有同一个类:

HealthCheckController,检查更改信息发现,不知道谁在A模块添加了B模块的依赖,造成了这一问题,删除后解决

        <dependency>            <groupId>com.test</groupId>            <artifactId>B</artifactId>            <version>1.0.0-SNAPSHOT</version>        </dependency>

启动提示bean重复问题

先说结论

只需要在@FeignClient注解的contextId属性上加上独一的标示,即可解决问题

原理

是因为注册feignClient的时候会注册ClientConfiguration,参考代码如下

public void reGISterFeignClients(AnnotationMetadata metadata,      BeanDefinitionRegistry registry) {   //...此处省略部分代码   //   for (String basePackage : basePackages) {      Set<BeanDefinition> candidateComponents = scanner            .findCandidateComponents(basePackage);      for (BeanDefinition candidateComponent : candidateComponents) {         if (candidateComponent instanceof AnnotatedBeanDefinition) {            // verify annotated class is an interface            //...省略部分代码             //这块是把注解上的所有属性封装到map上            Map<String, Object> attributes = annotationMetadata            .getAnnotationAttributes(            FeignClient.class.getCanonicalName());             //这两个重点方法请看下面代码块             //获取该feignClient的名字(重点关注该方法)            String name = getClientName(attributes);             //此方法就是spring注入beanDefination的步骤(重点关注该方法)            registerClientConfiguration(registry, name,                  attributes.get("configuration"));             registerFeignClient(registry, annotationMetadata, attributes);         }      }   }}

上面的两处重点方法, 请看此处

//@param client 这个map就是通过上面的注解属性转map得到的private String getClientName(Map<String, Object> client) {   if (client == null) {      return null;   }   //如果从contextId获取到名字,那么value有值的   String value = (String) client.get("contextId");   //如果value有值,那么如下3个if条件都不会走,所以contextId唯一就可以做到bean不重复,   //如果value没有值,就会取value,因为多个client的serverName都是一样的,那么就会出现重复bean   if (!StringUtils.hasText(value)) {      value = (String) client.get("value");   }   if (!StringUtils.hasText(value)) {      value = (String) client.get("name");   }   if (!StringUtils.hasText(value)) {      value = (String) client.get("serviceId");   }   if (StringUtils.hasText(value)) {      return value;   }    throw new IllegalStateException("Either 'name' or 'value' must be provided in @"         + FeignClient.class.getSimpleName());} private void registerClientConfiguration(BeanDefinitionRegistry registry, Object name,      Object configuration) {   BeanDefinitionBuilder builder = BeanDefinitionBuilder         .genericBeanDefinition(FeignClientSpecification.class);   builder.addConstructorArgValue(name);   builder.addConstructorArgValue(configuration);   //在这个位置,创建beanDefinition,但是他创建的名字格式可以看出,唯一改变变量就是name,这个name就是上面看到的那个方法获取的   registry.registerBeanDefinition(         name + "." + FeignClientSpecification.class.getSimpleName(),         builder.getBeanDefinition());}

看完了这篇文章,相信你对“如何解决springboot-启动bean冲突问题”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 如何解决springboot-启动bean冲突问题

本文链接: https://www.lsjlt.com/news/325570.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决springboot-启动bean冲突问题
    小编给大家分享一下如何解决springboot-启动bean冲突问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!启动bean冲突在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的beanorg.springfr...
    99+
    2023-06-29
  • springboot-启动bean冲突的解决
    目录启动bean冲突启动提示bean重复问题先说结论原理启动bean冲突 在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的bean org.springframework...
    99+
    2024-04-02
  • springBoot启动报错log4j冲突如何解决
    这篇文章主要讲解了“springBoot启动报错log4j冲突如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot启动报错log4j冲突如何解决”吧!springBoo...
    99+
    2023-06-20
  • 解决springboot生成bean名称冲突(AnnotationBeanNameGenerator)
    目录springboot生成bean名称冲突问题描述解决问题自定义bean对象重名问题springboot生成bean名称冲突 问题描述 我们再使用springboot的时候,在不同...
    99+
    2024-04-02
  • springboot生成bean名称冲突怎么解决
    本篇内容介绍了“springboot生成bean名称冲突怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot生成bea...
    99+
    2023-06-29
  • springboot依赖冲突问题及解决过程
    项目场景:  新搭了一个springboot 2.3.7.RELASE的框架,在集成mysql,tkMapper,mybatis的过程中,启动报错。 问题描述: 提示各种依...
    99+
    2024-04-02
  • 解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题
    目录MultipartResolver和ServletFileUpload冲突1.首先spring boot默认会调用MultipartResolver2.需要重写一个MyMulti...
    99+
    2024-04-02
  • springBoot启动报错log4j冲突的解决方案
    springBoot启动报错log4j冲突 先上一段报错内容 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: ...
    99+
    2024-04-02
  • maven冲突依赖问题如何解决
    Maven冲突依赖问题可以通过以下方法解决: 使用`mvn dependency:tree`命令查看项目的依赖树,找到冲突的依赖...
    99+
    2023-10-27
    maven
  • 如何解决css样式冲突问题
    本篇内容主要讲解“如何解决css样式冲突问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决css样式冲突问题”吧! 解决方法...
    99+
    2024-04-02
  • React样式冲突解决问题如何解决
    本篇内容主要讲解“React样式冲突解决问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React样式冲突解决问题如何解决”吧!前言:React最终编译打包后都在一个html页面中,如...
    99+
    2023-07-05
  • git提交冲突问题如何解决
    解决 Git 提交冲突问题一般有以下几个步骤: 确定冲突的文件:在使用 Git 进行提交时,可能会出现冲突的文件。使用 `git...
    99+
    2023-10-26
    git
  • 解决springboot启动报错bean找不到的问题
    目录springboot启动报错bean找不到的原因解决一.普通的dao,service对应的实例bean不存在报错示例:解决方案:二.由于bean的加载顺序和配置文件的关系补充:S...
    99+
    2023-03-01
    Springboot启动报错 类文件具有错误的版本 Springbot bean找不到
  • 如何解决Spring Cloud 服务冲突问题
    本篇文章为大家展示了如何解决Spring Cloud 服务冲突问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、背景在我们开发微服务架构系统时,虽然说每个微服务都是孤立的可以单独开发,但实际上并...
    99+
    2023-06-04
  • css样式冲突的问题如何解决
    本篇内容介绍了“css样式冲突的问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、 细化选择符通过使用组合器(Combinato...
    99+
    2023-06-20
  • mysql主键冲突的问题如何解决
    本篇内容介绍了“mysql主键冲突的问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明忽略冲突保留原始记录。冲突更新冲突后部分字...
    99+
    2023-06-20
  • ubuntu双网卡冲突问题如何解决
    要解决Ubuntu双网卡冲突问题,可以尝试以下步骤:1. 确定冲突:使用命令`ifconfig`或`ip addr`查看当前系统中的...
    99+
    2023-10-10
    ubuntu
  • 如何解决docker与vmware的冲突问题
    这篇文章给大家分享的是有关如何解决docker与vmware的冲突问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、docker启动问题:问题解决:需要开启Hyper-V,(开启方法:控制面板->程序-...
    99+
    2023-06-14
  • 怎么解决Maven冲突问题
    这篇文章主要介绍“怎么解决Maven冲突问题”,在日常操作中,相信很多人在怎么解决Maven冲突问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决Maven冲突问题”...
    99+
    2024-04-02
  • SpringBoot解决jar包冲突的问题,简单有效
    目录SpringBoot解决jar包冲突今天SpringBoot项目打包发现一直在报错我查到的一个解决方案,可使用所有jar包冲突问题springbootjar冲突问题集锦1、日志j...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作