springboot如何查找配置文件路徑的順序和其優先級別

查找配置文件路徑的順序和其優先級別

提示:以下是本篇文章正文內容,下面案例僅供參考

一、springboot查找配置文件路徑的順序和其優先級別

在項目類,有四個地方系統會自動掃描:

1.file:/config/

2.file:/

3.classPath:/config/

4.classPath:/

1)其文件生效優先級別,從上到下,即如果在不同路徑有相同屬性,會優先選擇上面的路徑屬性(1>2>3>4)

2)路徑掃描順序和其優先級別相反(4>3>2>1),後面的會覆蓋前面的,並且所有路徑都會掃描,形成互補。

二、同路徑下

application.properties(application.yml)、bootstrap.properties(bootstrap.yml)加載順序及優先級別

1.application和bootstrap比較(前綴比較)

提示:bootstrap類型文件是在多服務項目時,引入瞭springcloud相關配置才會生效,springboot並不會自動掃描bootstrap文件,隻會掃描application文件,所以兩者的比較隻有在spingcloud多服務項目中才有意義。

1)先後加載順序:若application 和bootstrap 在同一目錄下:bootstrap先加載 application後加載

2)優先級問題:Bootstrap 屬性有高優先級,默認情況下,它們不會被本地配置覆蓋。(這個是網上和官方的說法,但經過本人的測試,發現application 會覆蓋bootstrap,我的理解是不是所有的bootstrap屬性都比application優先,隻有涉及底層系統相關配置才會比較高 ,有不同看法的老哥歡迎探討)

3)區別:bootstrap 和 application 都可以用來配置參數。

bootstrap 用來程序引導時執行,應用於更加早期配置信息讀取。可以理解成系統級別的一些參數配置,這些參數一般是不會變動的。一旦bootstrap被加載,則內容不會被覆蓋。

application.yml 可以用來定義應用級別的, 應用程序特有配置信息,可以用來配置後續各個模塊中需使用的公共參數等。

4)bootstrap典型的應用場景(經典三點)

  • 1.當使用 Spring Cloud Config Server 配置中心時,這時需要在 bootstrap.yml 指定 spring.applicatio配置文件中n.name 和 spring.cloud.config.server.git.uri,添加連接到配置中心的配置屬性來加載外部配置中心的配置信息
  • 2.一些固定的不能被覆蓋的屬性
  • 3.一些加密/解密的場景

2. .properties和.yml比較(後綴比較)

1)加載順序

.yml先於.properties

2)優先級別

.properties優先於.yml,因為.properties後加載會覆蓋.yml

3)區別

  • 1.yml擁有天然的樹狀結構,properties是鍵值對;
  • 2.在properties文件中是以”.”進行分割的, 在.yml中是用”:”進行分割;
  • 3.在.yml中縮進一定不能使用TAB,否則會報很奇怪的錯誤;;
  • 4.yml比.properties對中文對支持更友好。
  • 5.yml是跨語言的:可以在包括JAVA,go,python等大量的語言中使用,比如做雲計算使用go和java的時候,可以通過配置中心使用同一份配置!
  • 6.在自定義配置文件時,隻能使用properties,因為spring隻有@PropertiesSource註解可以引入自定義註解,對yml沒有支持

小結:在同級目錄下,優先級別application>bootstrap,.properties>,yml,前綴大於後綴,文件路徑大於文件名稱

springboot配置文件不生效的原因

1、將打包方式改為jar 。

<packaging>jar</packaging>

2、可能是yml文件縮近格式不對,仔細檢查一下就行瞭。

3、還有就是你的根本就不是boot項目,application.yml沒有葉子標志

1.點開項目結構

2.打開模塊一次點擊

3.

4.重構項目

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: