SpringBoot配置文件高級用法實戰(zhàn)分享
一、總體優(yōu)先級順序
命令行參數:通過命令行啟動參數指定的配置擁有最高優(yōu)先級。這包括
java -jar命令后跟隨的配置參數。來自
SPRING_APPLICATION_JSON的屬性:嵌入在環(huán)境變量或系統(tǒng)屬性中的JSON格式配置信息,優(yōu)先級僅次于命令行參數。系統(tǒng)屬性:通過Java系統(tǒng)屬性傳遞的配置值,例如使用
-D參數設置的值。環(huán)境變量:操作系統(tǒng)環(huán)境變量中的配置值。
隨機生成的屬性(僅用于開發(fā)中的隨機端口號等):Spring Boot在開發(fā)環(huán)境中可以隨機生成一些屬性,例如隨機端口號。
應用配置文件(
application.properties或application.yml):按照特定順序加載的配置文件。在
@Configuration類中通過@PropertySource注解定義的屬性:通過編程方式指定的配置文件。默認屬性(通過
SpringApplication.setDefaultProperties指定的默認屬性):這些屬性在所有其他特定屬性源之后加載,因此優(yōu)先級最低。
二、應用配置文件的詳細優(yōu)先級
對于application.properties或application.yml等應用配置文件,Spring Boot按照以下順序加載,優(yōu)先級從高到低:
命令行中指定的配置文件:通過
--spring.config.location參數指定的配置文件。項目目錄下的
config子目錄:位于項目根目錄下的config(和jar包同一目錄)文件夾中的配置文件。項目根目錄:項目根目錄(和jar包同一目錄)下的配置文件。
類路徑下的
config包:src/main/resources/config目錄中的配置文件。類路徑根目錄:
src/main/resources目錄中的配置文件。
特別注意的是,配置文件內容是在的合并的前提下執(zhí)行優(yōu)先級,即不重復的配置內容會合并!
三、文件類型優(yōu)先級
在同一位置下,如果存在多種類型的配置文件(如.properties、.yml、.yaml),它們的優(yōu)先級順序為:
.properties.yml.yaml
四、特定環(huán)境配置
當使用特定環(huán)境的配置文件(如application-dev.yml、application-prod.yml)時,激活的特定環(huán)境配置文件將覆蓋通用配置文件中的相同屬性。如果指定了多個特定環(huán)境配置文件,則后面的配置文件將覆蓋前面的配置文件中的相同屬性。
五、配置文件高級用法
假設有以下配置文件:

類路徑根目錄下application.yml內容:
pack: name: root-name age: 11
類路徑config包下application.yml內容:
pack: name: classpath/config-name
讀取配置pack.name和pack.age,輸出結果為:
name = classpath/config-name, age = 11
這驗證了配置文件內容的合并以及優(yōu)先級規(guī)則。
5.1 修改配置文件名
使用spring.config.name環(huán)境屬性可以修改默認的配置文件名:
java -jar springboot-configfile-1.0.0.jar --spring.config.name=pack
5.2 修改配置文件位置
使用spring.config.location環(huán)境屬性指定配置文件的位置:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:classpath:/config/pack1.yml
使用optional:前綴可以忽略文件不存在的錯誤。也可以指定目錄讓Spring Boot自動拼接文件名:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/config/ --spring.config.name=pack
5.3 使用文件系統(tǒng)路徑
指定文件系統(tǒng)中的配置文件路徑:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:file:f:/ --spring.config.name=pack
5.4 附加配置文件
如需要添加其它的配置文件,并非是替換默認的配置文件,可從附加位置加載屬性(可以覆蓋默認位置中的屬性值)。
使用spring.config.additional-location加載額外的配置文件:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.name=pack --spring.config.additional-location=optional:file:f:/pack-akf.yml
5.5 可選位置
默認當指定的配置數據文件不存在時,SpringBoot會拋出ConfigDataLocationNotFoundException異常,應用程序將無法啟動.
使用optional:前綴忽略配置文件不存在的錯誤:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.on-not-found=ignore
忽略所有ConfigDataLocationNotFoundException并始終繼續(xù)啟動應用程序,可以使用spring.config.on-not-found屬性
六、多配置文件處理方式
背景需求
程序在部署的時候,一般是將配置文件放在jar包的外面,而當存在多個文件需要加載時,如項目中有:
cfg1.properties cfg2.properties
解決方法一
合并所有配置文件至一個文件中配置加載,然后使用spring.config.location配置加載。
把cfg1.properties和cfg2.properties中的配置都合并至cfg.properties中。
java -jar app.jar --spring.config.location=file:/path/to/cfg.properties
解決方法二
保持文件的各自獨立,使用spring.config.location屬性來指定應用程序的配置文件路徑??梢灾付ǘ鄠€配置文件,使用逗號分隔的文件路徑,例如:
java -jar api.jar --spring.config.location=file:/path/cfg1.properties,file:/path/cfg2.properties
到此這篇關于SpringBoot配置文件高級用法實戰(zhàn)分享的文章就介紹到這了,更多相關SpringBoot配置文件用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解SpringMVC加載配置Properties文件的幾種方式
這篇文章主要介紹了詳解SpringMVC加載配置Properties文件的幾種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02
淺談web服務器項目中request請求和response的相關響應處理
這篇文章主要介紹了淺談web服務器項目中request請求和response的相關響應處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07
SpringBoot如何啟動自動加載自定義模塊yml文件(PropertySourceFactory)
這篇文章主要介紹了SpringBoot如何啟動自動加載自定義模塊yml文件(PropertySourceFactory),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Mybatis提示Tag name expected的問題及解決
MyBatis是一個開源的Java持久層框架,用于將Java對象與數據庫表進行映射,它提供了一種簡單、靈活的方式來訪問數據庫,同時也提供了強大的SQL映射和查詢功能2025-01-01

