一開始以為又是下划線的原因,后來才發現,原來應用名和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,它的應用名的確不支持下划線。