關於使用application.yml配置文件啟動時 部分配置不生效 啟動失敗的問題


問題場景:在新建一個Spring Boot Module(Spring Boot 版本2.1.5-RELEASE)時,將application.properties文件修改為application.yml,然后進行相關配置。
其中配置了eureka.client.service-url.defaultZone:localhost:8095/eureka/ 然后啟動。但是在啟動時 連接的defaultZone 卻是 eureka:8095/eureka/ 。
然后新建了一個配置文件application-local.yml 使用相同的配置,然后切換active到local,再啟動,發現可以正常的;連接到localhost:8095/eureka/。
通過跟蹤SpringBoot 的啟動,最后發現在為EurekaClientConfigBean 綁定配置文件的屬性時,application.yml中的配置被application.properties中的配置覆蓋了

 

 

 

 

 

 

 可以看到,當存在多個配置文件時,會執行循環,當查找到第一條有效配置時就退出循環,而當使用application.yml文件時

 

 

而正常的source結構應該時這樣的,所以問題應該是出在,在初始化Binder的context時,多加進了一個application.properties。

 

 

 

 

通過該代碼可得知,properties的加載器是在yaml加載器之前的,所以如果在同目錄下,會先加載application.propertis再加載application.yml,也就解釋了為什么application.propertis 文件會在application.yml之前被讀取到了。
 
最后通過搜索所有的依賴類,終於在引入的stater包 找到了相關文件 application.properties.原來是因為該包中含有application.properties文件,而當我們的項目依賴該包時,該配置文件依然生效,並且優先於我們的application.yml加載。從而導致我們的配置失效。

 

 

 

 

解決方案:
 
1.指定profile-active。Spring會在查找配置文件時,加上profile-active后綴。
2.刪除依賴包中的application.properties
3.application.yml 更改為application.properties 直接覆蓋依賴包的配置


免責聲明!

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



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