異常:java.lang.IllegalArgumentException: Could not resolve placeholder 'xxx' in value "${xxx}"


一開始以為又是下划線的原因,后來才發現,原來應用名和yml配置的文件需要命名一致才行。

開端:

打算通過客戶端訪問服務端,服務端訪問github配置文件的方式,使client客戶端動態獲取github上配置信息。

我通過git bash一共上傳了兩個yml配置文件到github,一個是服務端配置文件,另一個是客戶端配置文件。

其中客戶端yml配置文件的命名不正確,與在eclipse中yml聲明的不一致,結果就是它導致了客戶端的yml失效。

測試:

測試的時候,服務端啟動正常,並且可以正常訪問github上的服務端yml,因為服務端的命名正確,但是客戶端就無法獲得配置文件的內容。

測試類里通過注解獲得配置文件的參數:

    @Value("${spring.application.name}") private String applicationName; @Value("${eureka.client.service-url.defaultZone}")//就是這里無法獲得github上yml配置文件參數,可以想象得到,是yml文件錯誤或失效。 private String eurekaServers;

客戶端啟動,由於無法獲得github上配置文件的參數,它報無效參數異常了;

Caused by: java.lang.IllegalArgumentException: 
Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}"

為什么我知道一定是參數沒有被獲取呢?因為啟動客戶端時,端口號沒有從github上的yml文件中動態獲取,同時它報了這個錯。

排查:

我確認所有的代碼都沒有問題,包括配置文件的內容,pom依賴,啟動類,測試類都沒有問題。

那么只剩下排查配置文件命名是否正確了,原來是yml配置文件的命名還有講究,不是隨便寫,而是要對應寫才行。

總結;

由於客戶端的端口號配置在github上的yml里,而對應的yml文件名稱又沒有寫對,結果整個失效的yml配置文件就無法提供內部各種參數,

這導致了測試類中通過value注解注入到spring里的配置文件參數無法被獲得,結果就報了這種異常。

原來並不是下划線惹的禍,而是命名不一致造成的,今天我竟然錯怪了下划線。

至於ribbon,它的應用名的確不支持下划線。

 


免責聲明!

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



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