環境:Springboot2。4。10
當應用程式啟動時,Spring Boot將自動從以下位置查詢並載入application。properties和application。yaml檔案:
從Classpath類路徑classpath的根類路徑classpath下的/config包
從當前目錄當前目錄當前目錄中的
/config
子目錄
/config
子目錄的直接子目錄
列表按優先順序排序(較低項的值優先於較早項)。載入檔案中的文件作為PropertySources新增到Spring環境中。
上面的載入順序是倒著的。
修改載入的配置檔名稱
預設是載入的以application的配置檔案,可以透過
spring。config。name
啟動引數進行修改:
java -jar myproject。jar ——spring。config。name=myproject
修改配置檔案路徑
使用
spring。config。location
屬性顯式指定位置。此屬性接受以逗號分隔的列表,其中包含一個或多個要檢查的位置。
java -jar myproject。jar ——spring。config。location=optional:classpath:/default。properties,optional:classpath:/override。properties
這裡的optional字首的意思是:
如果位置是可選的,並且您不介意它們是否不存在。簡單說就是這些路徑下的檔案是可選的。
配置檔案位置
如果
spring。config。location
包含目錄(與檔案相反),則它們應以
/
結尾。在執行時,它們將在載入之前附加從
spring。config。name
生成的名稱。直接匯入
spring。config。location
中指定的檔案。
1。1 可選位置
預設情況下,當指定的配置資料位置不存在時,Spring Boot將丟擲ConfigDataLocationNotFoundException,應用程式將不會啟動。
如果要指定一個位置,但不介意它是否總是存在,則可以使用
optional:
作為字首 。你可以將此字首與
spring。config。location
和
spring。config。additional-location
屬性以及
spring。config。import
宣告一起使用。
例如,
spring。config。import
值optional:file:。/myconfig。properties允許啟動應用程式,即使myconfig。properties檔案丟失。
如果要忽略所有ConfigDataLocationNotFoundException並始終繼續啟動應用程式,可以使用
spring。config。on-not-found
屬性。使用SpringApplication。setDefaultProperties(。。。)或使用系統/環境變數。
1。2 萬用字元位置
如果配置檔案位置包含最後一個路徑段的
*
字元,則將其視為萬用字元位置。在載入配置時,萬用字元會展開,以便同時檢查直接子目錄。在Kubernetes這樣的環境中,當存在多個配置屬性源時,萬用字元位置特別有用。
例如,如果你有一些Redis配置和一些MySQL配置,你可能希望將這兩個配置分開,同時要求它們都存在於application。properties檔案中。這可能會導致兩個單獨的application。properties檔案裝載在不同的位置,例如/config/redis/application。properties和/config/mysql/application。properties。在這種情況下,如果萬用字元位置為config/*/,將導致處理這兩個檔案。
預設情況下,Spring Boot在預設搜尋位置包含config/*/。這意味著將搜尋jar之外的/config目錄的所有子目錄。
您可以將萬用字元位置與
spring。config。location
和
spring。config。additional-location
屬性一起使用。
1。3 特定配置檔案
除了應用程式屬性檔案外,Spring Boot還將嘗試使用命名約定應用程式{profile}載入特定於概要檔案的檔案。例如,如果應用程式啟用名為prod的概要檔案並使用YAML檔案,則將同時考慮application。yml和application-prod。yml。
特定於配置檔案的屬性從與標準application。properties相同的位置載入,特定於配置檔案的檔案始終覆蓋非特定檔案。如果指定了多個配置檔案,則應用最後一個wins策略。例如,如果prod、live(即順序為:prod, live)配置檔案由spring。profiles。active屬性指定,則application-prod。properties中的值可以被application-live。properties中的值覆蓋。
1。4 匯入其它資料
應用程式屬性可以使用
spring。config。import
屬性從其他位置匯入更多配置資料。匯入會在發現時進行處理,並被視為插入宣告匯入的文件下方的附加文件。
例如:
spring: config: import: - optional:classpath。/config/cfg。yml
這裡的optional表示可選的,即匯入的檔案可以不存在;
看如下情況:
cfg。yml配置檔案內容
cfg: name: classpath:/config
spring: config: import: - optional:classpath:/config/cfg。yml——- cfg: name: a1
這裡的a1會覆蓋import中的值
cfg: name: a1——- spring: config: import: - optional:classpath:/config/cfg。yml
這裡cfg。yml配置的值會覆蓋a1值
可以在單個
spring。config。import
鍵下指定多個位置。位置將按照其定義的順序進行處理,以後的匯入將優先。
注意:官方文件說上面的兩種順序配置,產生的是同樣的效果,但是我這測試的後面的會替換前面的。
1。5 匯入無副檔名檔案
某些雲平臺無法向卷裝載的檔案新增副檔名。要匯入這些無擴充套件檔案,您需要給Spring Boot一個提示,以便它知道如何載入它們。可以透過將擴充套件提示放在方括號中來實現這一點。
例如,假設你有一個/etc/config/myconfig檔案,希望將其作為yaml匯入。您可以使用以下命令從application。properties匯入它:
spring: config: import: “file:/etc/config/myconfig[。yaml]”
完畢!!!
公眾號:Springboot實戰案例錦集
關注公眾,私信送電子書(Springboot實戰案例錦集 ,適合初中級)
SpringBoot專案使用Prometheus實時監控系統各項指標
springboot中使用布隆過濾器BloomFilter
Springboot整合RabbitMQ延遲佇列&優先順序佇列詳解
SpringBoot+Atomikos多資料來源分散式事務
SpringBoot整合RabbitMQ四種交換機型別詳解
Springboot啟動過程中的這個BeanPostProcessor你知道幹什麼的嗎
Springboot使用ElasticSearch動態建立索引批次儲存資料
使用Spring Boot Admin實時監控你的系統
Springboot註冊Servlet幾種方式你都知道?內部實現原理解析
SpringBoot 專案啟動完後你想做點什麼?Order介面控制順序執行
SpringBoot 注入例項變數Request執行緒安全嗎?
Springboot整合Kafka Stream實時統計資料
使用Filebeat收集springboot專案日誌到elasticsearch(EFK)
Springboot使用過程中總結的一些問題及技巧應用(一)