Springboot配置檔案載入路徑及使用方式你真的都瞭解了嗎?

環境: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使用過程中總結的一些問題及技巧應用(一)

Springboot配置檔案載入路徑及使用方式你真的都瞭解了嗎?

Springboot配置檔案載入路徑及使用方式你真的都瞭解了嗎?

Springboot配置檔案載入路徑及使用方式你真的都瞭解了嗎?

Springboot配置檔案載入路徑及使用方式你真的都瞭解了嗎?