最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot-啟動(dòng)bean沖突的解決

 更新時(shí)間:2022年03月24日 11:31:08   作者:鬼~離未罔兩  
這篇文章主要介紹了springboot-啟動(dòng)bean沖突的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

啟動(dòng)bean沖突

在一次啟動(dòng)中遇到了bean沖突的問題,提示存在兩個(gè)名稱重復(fù)的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]

項(xiàng)目中包括多個(gè)模塊,其中A、B兩個(gè)模塊都有同一個(gè)類:

HealthCheckController,檢查更改信息發(fā)現(xiàn),不知道誰在A模塊添加了B模塊的依賴,造成了這一問題,刪除后解決

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

啟動(dòng)提示bean重復(fù)問題

先說結(jié)論

只需要在@FeignClient注解的contextId屬性上加上獨(dú)一的標(biāo)示,即可解決問題

原理

是因?yàn)樽詅eignClient的時(shí)候會(huì)注冊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());
?
? ? ? ? ? ? //這兩個(gè)重點(diǎn)方法請看下面代碼塊
?
? ? ? ? ? ? //獲取該feignClient的名字(重點(diǎn)關(guān)注該方法)
? ? ? ? ? ? String name = getClientName(attributes);
?
? ? ? ? ? ? //此方法就是spring注入beanDefination的步驟(重點(diǎn)關(guān)注該方法)
? ? ? ? ? ? registerClientConfiguration(registry, name,
? ? ? ? ? ? ? ? ? attributes.get("configuration"));
?
? ? ? ? ? ? registerFeignClient(registry, annotationMetadata, attributes);
? ? ? ? ?}
? ? ? }
? ?}
}

上面的兩處重點(diǎn)方法, 請看此處

//@param client 這個(gè)map就是通過上面的注解屬性轉(zhuǎn)map得到的
private String getClientName(Map<String, Object> client) {
? ?if (client == null) {
? ? ? return null;
? ?}
? ?//如果從contextId獲取到名字,那么value有值的
? ?String value = (String) client.get("contextId");
? ?//如果value有值,那么如下3個(gè)if條件都不會(huì)走,所以contextId唯一就可以做到bean不重復(fù),
? ?//如果value沒有值,就會(huì)取value,因?yàn)槎鄠€(gè)client的serverName都是一樣的,那么就會(huì)出現(xiàn)重復(fù)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);
? ?//在這個(gè)位置,創(chuàng)建beanDefinition,但是他創(chuàng)建的名字格式可以看出,唯一改變變量就是name,這個(gè)name就是上面看到的那個(gè)方法獲取的
? ?registry.registerBeanDefinition(
? ? ? ? ?name + "." + FeignClientSpecification.class.getSimpleName(),
? ? ? ? ?builder.getBeanDefinition());
}

以上就是feign導(dǎo)致的springBean重復(fù)問題的解釋,僅上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java處理日期時(shí)間的方法匯總

    Java處理日期時(shí)間的方法匯總

    這篇文章主要給大家介紹了利用Java中的Calendar 類處理日期時(shí)間的方法匯總,其中包括取日期的每部分、取當(dāng)月的第一天或最后一天、求兩個(gè)日期之間相隔的天數(shù)以及一年前的日期等等的示例代碼,有需要的朋友們可以直接參考借鑒,下面來一起看看吧。
    2016-12-12
  • Mybatis分頁插件PageHelper的分頁原理剖析

    Mybatis分頁插件PageHelper的分頁原理剖析

    這篇文章主要介紹了Mybatis分頁插件PageHelper的分頁原理剖析,PageHelper作為一個(gè)啟動(dòng)器,那么就和其他啟動(dòng)器加載一樣,先讀取spring.factories文件里面配置的類,轉(zhuǎn)成Bean加載本系統(tǒng)中,然后執(zhí)行他的前置后置處理方法,完成初始化,需要的朋友可以參考下
    2023-08-08
  • 聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制

    聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制

    這篇文章主要介紹了聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot整合Ip2region獲取IP地址和定位的詳細(xì)過程

    SpringBoot整合Ip2region獲取IP地址和定位的詳細(xì)過程

    ip2region v2.0 - 是一個(gè)離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,10微秒級別的查詢效率,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實(shí)現(xiàn) ,這篇文章主要介紹了SpringBoot整合Ip2region獲取IP地址和定位,需要的朋友可以參考下
    2023-06-06
  • java高并發(fā)之線程的基本操作詳解

    java高并發(fā)之線程的基本操作詳解

    本文主要介紹java高并發(fā)線程的基本操作,這里整理詳細(xì)的資料來解釋線程的知識(shí),有需要的學(xué)習(xí)高并發(fā)的朋友可以參考下
    2021-10-10
  • SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢和刪除商品類別功能實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢和刪除商品類別功能實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢和刪除商品類別功能實(shí)現(xiàn),為項(xiàng)目增加功能,添加、更新、刪除和查詢操作,感興趣的小伙伴們可以參考一下
    2016-05-05
  • SpringBoot請求轉(zhuǎn)發(fā)的方式小結(jié)

    SpringBoot請求轉(zhuǎn)發(fā)的方式小結(jié)

    本文主要介紹了SpringBoot請求轉(zhuǎn)發(fā)的方式,一共有兩大類,一種是controller控制器轉(zhuǎn)發(fā)一種是使用HttpServletRequest進(jìn)行轉(zhuǎn)發(fā),本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2023-09-09
  • Java多線程Thread基礎(chǔ)學(xué)習(xí)

    Java多線程Thread基礎(chǔ)學(xué)習(xí)

    每一個(gè)正在執(zhí)行的程序都是一個(gè)進(jìn)程,資源只有一塊,所以在同一時(shí)間段會(huì)有多個(gè)程序同時(shí)執(zhí)行,但是在一個(gè)時(shí)間點(diǎn)上,只能由一個(gè)程序執(zhí)行,多線程是在一個(gè)進(jìn)程的基礎(chǔ)之上的進(jìn)一步劃分,需要的朋友可以參考下
    2023-04-04
  • Java編程枚舉類實(shí)戰(zhàn)代碼分享

    Java編程枚舉類實(shí)戰(zhàn)代碼分享

    這篇文章主要介紹了Java編程枚舉類實(shí)戰(zhàn)代碼分享,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java如何自動(dòng)生成api文檔

    Java如何自動(dòng)生成api文檔

    在?Java?開發(fā)中,自動(dòng)生成?API?文檔是一項(xiàng)非常實(shí)用的功能,這篇為大家介紹了幾種常見的?Java?自動(dòng)生成?API?文檔的方式,需要的可以參考一下
    2025-02-02

最新評論

富川| 庆阳市| 平度市| 宁武县| 龙里县| 高尔夫| 广西| 江门市| 东丽区| 临清市| 唐河县| 大英县| 峨眉山市| 四子王旗| 白玉县| 平乐县| 奉新县| 南昌县| 河池市| 肇东市| 林甸县| 昭通市| 广南县| 册亨县| 常熟市| 左权县| 平阴县| 横山县| 张家港市| 五家渠市| 额尔古纳市| 清丰县| 钦州市| 揭阳市| 丰宁| 肥西县| 运城市| 万山特区| 兴义市| 遂宁市| 鸡泽县|