亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot自動(dòng)裝配TypeNotPresentExceptionProxy異常排查解決

 更新時(shí)間:2023年09月19日 10:53:17   作者:linyb極客之路  
這篇文章主要為大家介紹了springboot自動(dòng)裝配TypeNotPresentExceptionProxy異常排查解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

正文開始前,我們做個(gè)小測(cè)試,假設(shè)我們封裝了一個(gè)springboot starter,其自動(dòng)裝配類形如下內(nèi)容

@Configuration
@EnableConfigurationProperties({ApolloRefreshProperties.class})
public class ApolloRefreshAutoConfiguration  {

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnClass({ConfigService.class})
    public ApolloRefreshService apolloRefreshService(ApolloRefreshProperties properties) {
        return new ApolloRefreshService(properties);
    }
    }

該starter的pom引入的apollo gav是optional

<dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>${apollo-client.version}</version>
            <optional>true</optional>
        </dependency>

我的問(wèn)題是

在運(yùn)行環(huán)境為jdk8的springboot項(xiàng)目引入上述的starter,是否會(huì)有問(wèn)題?

我們運(yùn)行一下,發(fā)現(xiàn)會(huì)出現(xiàn)

然后我們不改任何一行代碼,把JDK調(diào)成11或者以上版本,再運(yùn)行

項(xiàng)目成功運(yùn)行。那我們的修復(fù)的第一直覺是不是把JDK8的版本提高。

我們團(tuán)隊(duì)的小伙伴第一時(shí)間也是這么干的,他去和業(yè)務(wù)團(tuán)隊(duì)的技術(shù)經(jīng)理溝通,看他們能不能把JDK8調(diào)整成JDK11,然后得到了業(yè)務(wù)團(tuán)隊(duì)技術(shù)經(jīng)理的高度否定,因?yàn)樗麄兇蟛糠謽I(yè)務(wù)都跑在jdk8,冒然升級(jí)成jdk11,也不知道會(huì)不會(huì)因?yàn)榱私鉀Q一個(gè)問(wèn)題,而引入其他問(wèn)題

問(wèn)題排查

因?yàn)檫@個(gè)starter的自動(dòng)裝配配置的內(nèi)容相對(duì)簡(jiǎn)單,基于老司機(jī)的第六感,問(wèn)題大概率是出現(xiàn)在@ConditionalOnClass這注解上,于是點(diǎn)開@ConditionalOnClass,他的注解上有如下提示

他的大意是,可以在@Configuration classes上安全地指定value(),因?yàn)樵诩虞d類之前會(huì)使用ASM解析注釋元數(shù)據(jù)。當(dāng)放置在@Bean方法上時(shí),需要格外小心,請(qǐng)考慮在單獨(dú)的Configuration類中隔離條件,特別是當(dāng)方法的返回類型與條件的目標(biāo)匹配時(shí)。如果非要用方法注解,建議使用ConditionalOnClass里面的name字段

于是我們聽官方的建議,將starter調(diào)整如下

@Configuration
@EnableConfigurationProperties({ApolloRefreshProperties.class})
public class ApolloRefreshAutoConfiguration  {
    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnClass(name = "com.ctrip.framework.apollo.ConfigService")
    public ApolloRefreshService apolloRefreshService(ApolloRefreshProperties properties) {
        return new ApolloRefreshService(properties);
    }
    }

再次運(yùn)行,果然不再報(bào)錯(cuò)。具體問(wèn)題原因,我就不班門弄斧了,可以查看官方的issue

https://github.com/spring-projects/spring-boot/issues/27846

https://github.com/spring-projects/spring-boot/issues/17282

總結(jié)

首先如果用 @ConditionalOnClass注解,強(qiáng)烈建議使用name屬性,而不要用value屬性。其次如果有提供組件給其他業(yè)務(wù)團(tuán)隊(duì)使用,要特別關(guān)注版本問(wèn)題,以及做好向下兼容,不然指不定又掉坑了。

以上就是springboot自動(dòng)裝配TypeNotPresentExceptionProxy異常排查解決的詳細(xì)內(nèi)容,更多關(guān)于springboot TypeNotPresentExceptionProxy的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatis二級(jí)緩存實(shí)現(xiàn)關(guān)聯(lián)刷新

    MyBatis二級(jí)緩存實(shí)現(xiàn)關(guān)聯(lián)刷新

    本文主要介紹了MyBatis二級(jí)緩存實(shí)現(xiàn)關(guān)聯(lián)刷新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Java 8對(duì)LinkedHashSet元素進(jìn)行排序的操作方法

    Java 8對(duì)LinkedHashSet元素進(jìn)行排序的操作方法

    LinkedHashSet 是 Java 集合框架中的一個(gè)類,它繼承自 HashSet,并實(shí)現(xiàn)了 Set 接口,然而,LinkedHashSet 不支持元素的排序,它僅僅保持插入順序,所以本文給大家介紹了Java 8 如何對(duì) LinkedHashSet 元素進(jìn)行排序,需要的朋友可以參考下
    2024-11-11
  • Java老矣 尚能飯否?

    Java老矣 尚能飯否?

    Java老矣,尚能飯否?各類編程語(yǔ)言橫空出世,紛戰(zhàn)不休,然而 TIOBE 的語(yǔ)言排行榜上,Java 卻露出了明顯的頹勢(shì)。這個(gè)老牌的語(yǔ)言,未來(lái)會(huì)是怎樣?
    2017-06-06
  • SpringCloud微服務(wù)中跨域配置的方法詳解

    SpringCloud微服務(wù)中跨域配置的方法詳解

    在使用SpringCloud實(shí)現(xiàn)微服務(wù)時(shí),經(jīng)常會(huì)碰到前端頁(yè)面訪問(wèn)多個(gè)二級(jí)域名的情況,跨域是首先要解決的問(wèn)題。解決這個(gè)問(wèn)題,可以從兩方面入手,一種方案是在微服務(wù)各自的業(yè)務(wù)模塊中實(shí)現(xiàn),即在SpringBoot層實(shí)現(xiàn),另外一種方案就是在Gateway層實(shí)現(xiàn)
    2023-02-02
  • Java中Controller、Service、Dao/Mapper層的區(qū)別與用法

    Java中Controller、Service、Dao/Mapper層的區(qū)別與用法

    在Java開發(fā)中,通常會(huì)采用三層架構(gòu)(或稱MVC架構(gòu))來(lái)劃分程序的職責(zé)和功能,分別是Controller層、Service層、Dao/Mapper層,本文將詳細(xì)給大家介紹了三層的區(qū)別和用法,需要的朋友可以參考下
    2023-05-05
  • Java編程實(shí)現(xiàn)排他鎖代碼詳解

    Java編程實(shí)現(xiàn)排他鎖代碼詳解

    這篇文章主要介紹了Java編程實(shí)現(xiàn)排他鎖的相關(guān)內(nèi)容,敘述了實(shí)現(xiàn)此代碼鎖所需要的功能,以及作者的解決方案,然后向大家分享了設(shè)計(jì)源碼,需要的朋友可以參考下。
    2017-10-10
  • Spring Boot 自定義starter的示例代碼

    Spring Boot 自定義starter的示例代碼

    這篇文章主要介紹了Spring Boot 自定義starter的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • SpringCloud之LoadBalancer負(fù)載均衡服務(wù)調(diào)用過(guò)程

    SpringCloud之LoadBalancer負(fù)載均衡服務(wù)調(diào)用過(guò)程

    這篇文章主要介紹了SpringCloud之LoadBalancer負(fù)載均衡服務(wù)調(diào)用過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java 后臺(tái)將base64字符串保存為圖片的方法

    java 后臺(tái)將base64字符串保存為圖片的方法

    本篇文章主要介紹了java 后臺(tái)將base64字符串保存為圖片的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞的實(shí)現(xiàn)詳解

    SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞的實(shí)現(xiàn)詳解

    這篇文章主要介紹了SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞,對(duì)于重定向,可以通過(guò)FlashMap或RedirectAttributes來(lái)在請(qǐng)求間傳遞數(shù)據(jù),因?yàn)橹囟ㄏ蛏婕皟蓚€(gè)獨(dú)立的HTTP請(qǐng)求,而轉(zhuǎn)發(fā)則在同一請(qǐng)求內(nèi)進(jìn)行,數(shù)據(jù)可以直接通過(guò)HttpServletRequest共享,需要的朋友可以參考下
    2022-07-07

最新評(píng)論