返回顶部
首页 > 资讯 > 后端开发 > Python >springboot-启动bean冲突的解决
  • 301
分享到

springboot-启动bean冲突的解决

2024-04-02 19:04:59 301人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录启动bean冲突启动提示bean重复问题先说结论原理启动bean冲突 在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的bean org.springframework

启动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());
}

以上就是feign导致的springBean重复问题的解释,仅上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springboot-启动bean冲突的解决

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

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

猜你喜欢
  • springboot-启动bean冲突的解决
    目录启动bean冲突启动提示bean重复问题先说结论原理启动bean冲突 在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的bean org.springframework...
    99+
    2024-04-02
  • 如何解决springboot-启动bean冲突问题
    小编给大家分享一下如何解决springboot-启动bean冲突问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!启动bean冲突在一次启动中遇到了bean冲突的问题,提示存在两个名称重复的beanorg.springfr...
    99+
    2023-06-29
  • 解决springboot生成bean名称冲突(AnnotationBeanNameGenerator)
    目录springboot生成bean名称冲突问题描述解决问题自定义bean对象重名问题springboot生成bean名称冲突 问题描述 我们再使用springboot的时候,在不同...
    99+
    2024-04-02
  • springBoot启动报错log4j冲突的解决方案
    springBoot启动报错log4j冲突 先上一段报错内容 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: ...
    99+
    2024-04-02
  • springBoot启动报错log4j冲突如何解决
    这篇文章主要讲解了“springBoot启动报错log4j冲突如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot启动报错log4j冲突如何解决”吧!springBoo...
    99+
    2023-06-20
  • springboot生成bean名称冲突怎么解决
    本篇内容介绍了“springboot生成bean名称冲突怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot生成bea...
    99+
    2023-06-29
  • springboot项目突然启动缓慢的解决
    目录springboot项目突然启动缓慢springboot启动太慢优化1.组件自动扫描带来的问题(@SpringBootApplication)2.如何避免组件自动扫描带来的问题(...
    99+
    2024-04-02
  • 解决动态库的符号冲突
    一次debug遇到的疑惑某天发现一个程序有点问题,祭上print大法。 一次debug遇到的疑惑 某天发现一个程序有点问题。祭上print大法,在关键的 lib_func() 函数里添加 print 调试信息...
    99+
    2020-12-02
    解决动态库的符号冲突
  • Android滑动冲突的完美解决
    Android滑动在智能手机上是必备的操作,但是在开发的时候,你是否和我一样,经常会遇到滑动冲突的问题,比如最简单需要在ListView里面添加一个侧滑动作,这时候冲突时必然的...
    99+
    2022-06-06
    Android
  • ViewPager2滑动冲突的解决方法
    ViewPager2滑动冲突解决,供大家参考,具体内容如下 本文章对ViewPager2的滑动冲突没有提供完善的解决方案,仅为巩固解决滑动冲突方面的知识 首先看看没有解决滑动冲突时...
    99+
    2024-04-02
  • 解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题
    目录MultipartResolver和ServletFileUpload冲突1.首先spring boot默认会调用MultipartResolver2.需要重写一个MyMulti...
    99+
    2024-04-02
  • win101909驱动冲突如何解决
    本文小编为大家详细介绍“win101909驱动冲突如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“win101909驱动冲突如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一种方法 找到桌面上的【...
    99+
    2023-07-01
  • win101903驱动冲突如何解决
    本篇内容主要讲解“win101903驱动冲突如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win101903驱动冲突如何解决”吧!第一种方法:找到桌面上的【此电脑】图标,右键点击。点击之...
    99+
    2023-07-01
  • 解决springboot启动报错bean找不到的问题
    目录springboot启动报错bean找不到的原因解决一.普通的dao,service对应的实例bean不存在报错示例:解决方案:二.由于bean的加载顺序和配置文件的关系补充:S...
    99+
    2023-03-01
    Springboot启动报错 类文件具有错误的版本 Springbot bean找不到
  • springboot类加载器冲突怎么解决
    类加载器冲突通常出现在Spring Boot应用程序中,可能是因为多个类加载器加载了同一个类,导致冲突。要解决这个问题,可以尝试以下...
    99+
    2024-04-02
  • springboot启动报错bean找不到怎么解决
    这篇文章主要讲解了“springboot启动报错bean找不到怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot启动报错bean找不到怎么解决”吧!springboo...
    99+
    2023-07-05
  • Android listview的滑动冲突解决方法
    Android listview的滑动冲突解决方法 在Android开发的过程中,有时候会遇到子控件和父控件都要滑动的情况,尤其是当子控件为listview的时候。就比如在一个...
    99+
    2022-06-06
    方法 listview Android
  • win10的1903驱动冲突怎么解决
    本篇内容介绍了“win10的1903驱动冲突怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一种方法 找到桌面上的【此电脑】图标,右...
    99+
    2023-07-01
  • springboot项目突然启动缓慢的解决方法
    这篇文章将为大家详细讲解有关springboot项目突然启动缓慢的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。springboot项目突然启动缓慢springboot项目在debu...
    99+
    2023-06-25
  • springboot依赖冲突问题及解决过程
    项目场景:  新搭了一个springboot 2.3.7.RELASE的框架,在集成mysql,tkMapper,mybatis的过程中,启动报错。 问题描述: 提示各种依...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作