SpringBoot配置文件高級用法實戰(zhàn)分享
一、總體優(yōu)先級順序
命令行參數(shù):通過命令行啟動參數(shù)指定的配置擁有最高優(yōu)先級。這包括
java -jar
命令后跟隨的配置參數(shù)。來自
SPRING_APPLICATION_JSON
的屬性:嵌入在環(huán)境變量或系統(tǒng)屬性中的JSON格式配置信息,優(yōu)先級僅次于命令行參數(shù)。系統(tǒng)屬性:通過Java系統(tǒng)屬性傳遞的配置值,例如使用
-D
參數(shù)設(shè)置的值。環(huán)境變量:操作系統(tǒng)環(huán)境變量中的配置值。
隨機(jī)生成的屬性(僅用于開發(fā)中的隨機(jī)端口號等):Spring Boot在開發(fā)環(huán)境中可以隨機(jī)生成一些屬性,例如隨機(jī)端口號。
應(yīng)用配置文件(
application.properties
或application.yml
):按照特定順序加載的配置文件。在
@Configuration
類中通過@PropertySource
注解定義的屬性:通過編程方式指定的配置文件。默認(rèn)屬性(通過
SpringApplication.setDefaultProperties
指定的默認(rèn)屬性):這些屬性在所有其他特定屬性源之后加載,因此優(yōu)先級最低。
二、應(yīng)用配置文件的詳細(xì)優(yōu)先級
對于application.properties
或application.yml
等應(yīng)用配置文件,Spring Boot按照以下順序加載,優(yōu)先級從高到低:
命令行中指定的配置文件:通過
--spring.config.location
參數(shù)指定的配置文件。項目目錄下的
config
子目錄:位于項目根目錄下的config
(和jar包同一目錄)文件夾中的配置文件。項目根目錄:項目根目錄(和jar包同一目錄)下的配置文件。
類路徑下的
config
包:src/main/resources/config
目錄中的配置文件。類路徑根目錄:
src/main/resources
目錄中的配置文件。
特別注意的是,配置文件內(nèi)容是在的合并的前提下執(zhí)行優(yōu)先級,即不重復(fù)的配置內(nèi)容會合并!
三、文件類型優(yōu)先級
在同一位置下,如果存在多種類型的配置文件(如.properties
、.yml
、.yaml
),它們的優(yōu)先級順序為:
.properties
.yml
.yaml
四、特定環(huán)境配置
當(dāng)使用特定環(huán)境的配置文件(如application-dev.yml
、application-prod.yml
)時,激活的特定環(huán)境配置文件將覆蓋通用配置文件中的相同屬性。如果指定了多個特定環(huán)境配置文件,則后面的配置文件將覆蓋前面的配置文件中的相同屬性。
五、配置文件高級用法
假設(shè)有以下配置文件:
類路徑根目錄下application.yml
內(nèi)容:
pack: name: root-name age: 11
類路徑config
包下application.yml
內(nèi)容:
pack: name: classpath/config-name
讀取配置pack.name
和pack.age
,輸出結(jié)果為:
name = classpath/config-name, age = 11
這驗證了配置文件內(nèi)容的合并以及優(yōu)先級規(guī)則。
5.1 修改配置文件名
使用spring.config.name
環(huán)境屬性可以修改默認(rè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 附加配置文件
如需要添加其它的配置文件,并非是替換默認(rèn)的配置文件,可從附加位置加載屬性(可以覆蓋默認(rèn)位置中的屬性值)。
使用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 可選位置
默認(rèn)當(dāng)指定的配置數(shù)據(jù)文件不存在時,SpringBoot會拋出ConfigDataLocationNotFoundException異常,應(yīng)用程序?qū)o法啟動.
使用optional:
前綴忽略配置文件不存在的錯誤:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.on-not-found=ignore
忽略所有ConfigDataLocationNotFoundException并始終繼續(xù)啟動應(yīng)用程序,可以使用spring.config.on-not-found屬性
六、多配置文件處理方式
背景需求
程序在部署的時候,一般是將配置文件放在jar包的外面,而當(dāng)存在多個文件需要加載時,如項目中有:
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
解決方法二
保持文件的各自獨(dú)立,使用spring.config.location屬性來指定應(yīng)用程序的配置文件路徑??梢灾付ǘ鄠€配置文件,使用逗號分隔的文件路徑,例如:
java -jar api.jar --spring.config.location=file:/path/cfg1.properties,file:/path/cfg2.properties
到此這篇關(guān)于SpringBoot配置文件高級用法實戰(zhàn)分享的文章就介紹到這了,更多相關(guān)SpringBoot配置文件用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 數(shù)據(jù)結(jié)構(gòu)鏈表操作實現(xiàn)代碼
這篇文章主要介紹了Java 數(shù)據(jù)結(jié)構(gòu)鏈表操作的相關(guān)資料,并附實例代碼,需要的朋友可以參考下2016-10-10springboot整合Nginx實現(xiàn)負(fù)載均衡反向代理的方法詳解
這篇文章主要給大家介紹了關(guān)于springboot整合Nginx實現(xiàn)負(fù)載均衡反向代理的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01SpringBoot如何進(jìn)行參數(shù)校驗實例詳解
開發(fā)過程中,后臺的參數(shù)校驗是必不可少的,下面這篇文章主要給大家介紹了關(guān)于SpringBoot如何進(jìn)行參數(shù)校驗的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法
這篇文章主要給大家介紹了關(guān)于SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法,所謂多數(shù)據(jù)源就是一個Java EE項目中采用了不同數(shù)據(jù)庫實例中的多個庫,或者是同一個數(shù)據(jù)庫實例中的多個不同庫,需要的朋友可以參考下2023-11-11SpringBoot中通過8項配置優(yōu)化提升Tomcat性能的配置方法
優(yōu)化Spring Boot,Spring Cloud 應(yīng)用程序中Tomcat的配置有助于提高性能和資源利用率,這篇文章主要介紹了SpringBoot中通過8項配置優(yōu)化提升Tomcat性能的配置方法,需要的朋友可以參考下2024-08-08