記一次Eureka啟動報Failed to start bean 'eurekaAutoServiceRegistration' 。。。錯誤


  在一次項目遷移的過程中,新導入了兩個依賴,結果項目啟動就報錯,如下:

 

  主要原因是:Failed to start bean 'eurekaAutoServiceRegistration'; nested exception is java.lang.NullPointerException,我的理解是初始化失敗了,這種涉及到框架的錯誤一出現,一開始確實沒有頭緒,也參考了網上的資料,主要如下:

  1. 有把原因歸咎於引入了fastjson導致的,項目中確實是引入了fastjson,但是將其依賴去除之后依然報錯,所以這個方法對我無效;
  2. 也有說是未引入Jackson或者版本不對,但是這很模糊,是什么版本不對?並沒有說清楚;

  其實這里問題的出現是由於我新引入的了兩個依賴導致的,這是排查問題的源頭,我們排查問題時不能沒有思路,要順藤摸瓜,追根溯源,一步一步來定位問題。我引入的依賴如下:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.2.1</version>
    </dependency>

  這是兩個httpcompoents包,是由於項目中需要發起https請求引入的,怎么引入這個依賴就會導致沖突呢?

 

  maven依賴規則里面有兩條分別是:

  • 聲明優先原則,在pom.xml配置文件中,如果有兩個名稱相同版本不同的依賴聲明,那么先寫的會生效。 所以,先聲明自己要用的版本的jar包即可
  • 路徑近者優先,直接依賴優先於傳遞依賴,如果傳遞依賴的jar包版本沖突了,那么可以自己聲明一個指定版本的依賴jar,即可解決沖突;

  其中從第二條,我的理解是以路徑最近的為准,這里路徑最近的就是我新引入的這兩個依賴,那是否是eureka也有依賴httpcomponents,但是根據路徑近者優先原則,eureka啟動時主動依賴新的這兩個包,但是這兩個包版本可能和eureka不兼容,從而啟動失敗?好,那就來驗證一下:

  看項目依賴我平時常用的是直接把項目的依賴樹打出來,直接看,這樣比較全面。Windows 10 系統下進入cmd命令窗口,在項目根目錄下輸入如下指令(電腦上需安裝了maven):

mvn dependency:tree

  打印出來的依賴樹如下(截取了部分):

 

  看到了嗎,eureka確實引入了httpcomponents兩個包,而且版本號高於我自己引入的,應該是版本號不兼容導致啟動報錯,所以我把自己引入的兩個包版本號改了一下,結果確實成功啟動了。

  到這里問題已經解決了,特此記錄一下

參考文獻:

Failed to start bean 'eurekaAutoServiceRegistration'

Can't use @EnableEurekaClient to register config server with Eureka


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM