欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot自動裝配TypeNotPresentExceptionProxy異常排查解決

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

前言

正文開始前,我們做個小測試,假設我們封裝了一個springboot starter,其自動裝配類形如下內(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>

我的問題是

在運行環(huán)境為jdk8的springboot項目引入上述的starter,是否會有問題?

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

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

項目成功運行。那我們的修復的第一直覺是不是把JDK8的版本提高。

我們團隊的小伙伴第一時間也是這么干的,他去和業(yè)務團隊的技術(shù)經(jīng)理溝通,看他們能不能把JDK8調(diào)整成JDK11,然后得到了業(yè)務團隊技術(shù)經(jīng)理的高度否定,因為他們大部分業(yè)務都跑在jdk8,冒然升級成jdk11,也不知道會不會因為了解決一個問題,而引入其他問題

問題排查

因為這個starter的自動裝配配置的內(nèi)容相對簡單,基于老司機的第六感,問題大概率是出現(xiàn)在@ConditionalOnClass這注解上,于是點開@ConditionalOnClass,他的注解上有如下提示

他的大意是,可以在@Configuration classes上安全地指定value(),因為在加載類之前會使用ASM解析注釋元數(shù)據(jù)。當放置在@Bean方法上時,需要格外小心,請考慮在單獨的Configuration類中隔離條件,特別是當方法的返回類型與條件的目標匹配時。如果非要用方法注解,建議使用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);
    }
    }

再次運行,果然不再報錯。具體問題原因,我就不班門弄斧了,可以查看官方的issue

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

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

總結(jié)

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

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

相關文章

  • MyBatis二級緩存實現(xiàn)關聯(lián)刷新

    MyBatis二級緩存實現(xiàn)關聯(lián)刷新

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

    Java 8對LinkedHashSet元素進行排序的操作方法

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

    Java老矣 尚能飯否?

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

    SpringCloud微服務中跨域配置的方法詳解

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

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

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

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

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

    Spring Boot 自定義starter的示例代碼

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

    SpringCloud之LoadBalancer負載均衡服務調(diào)用過程

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

    java 后臺將base64字符串保存為圖片的方法

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

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

    這篇文章主要介紹了SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞,對于重定向,可以通過FlashMap或RedirectAttributes來在請求間傳遞數(shù)據(jù),因為重定向涉及兩個獨立的HTTP請求,而轉(zhuǎn)發(fā)則在同一請求內(nèi)進行,數(shù)據(jù)可以直接通過HttpServletRequest共享,需要的朋友可以參考下
    2022-07-07

最新評論