環(huán)境:Springboot2.4.10
當(dāng)應(yīng)用程序啟動(dòng)時(shí),Spring Boot將自動(dòng)從以下位置查找并加載Application.properties和application.yaml文件:
- 從Classpath類(lèi)路徑classpath的根類(lèi)路徑classpath下的/config包
- 從當(dāng)前目錄當(dāng)前目錄當(dāng)前目錄中的/config子目錄/config子目錄的直接子目錄
列表按優(yōu)先級(jí)排序(較低項(xiàng)的值優(yōu)先于較早項(xiàng))。加載文件中的文檔作為PropertySources添加到Spring環(huán)境中。
上面的加載順序是倒著的。
- 修改加載的配置文件名稱(chēng)
默認(rèn)是加載的以application的配置文件,可以通過(guò)spring.config.name啟動(dòng)參數(shù)進(jìn)行修改:
JAVA -jar myproject.jar --spring.config.name=myproject
- 修改配置文件路徑
使用spring.config.location屬性顯式指定位置。此屬性接受以逗號(hào)分隔的列表,其中包含一個(gè)或多個(gè)要檢查的位置。
java -jar myproject.jar --spring.config.location=optional:classpath:/default.properties,optional:classpath:/override.properties
這里的optional前綴的意思是:
如果位置是可選的,并且您不介意它們是否不存在。簡(jiǎn)單說(shuō)就是這些路徑下的文件是可選的。
- 配置文件位置
如果spring.config.location包含目錄(與文件相反),則它們應(yīng)以/結(jié)尾。在運(yùn)行時(shí),它們將在加載之前附加從spring.config.name生成的名稱(chēng)。直接導(dǎo)入spring.config.location中指定的文件。
1.1 可選位置
默認(rèn)情況下,當(dāng)指定的配置數(shù)據(jù)位置不存在時(shí),Spring Boot將拋出
ConfigDataLocationNotFoundException,應(yīng)用程序?qū)⒉粫?huì)啟動(dòng)。
如果要指定一個(gè)位置,但不介意它是否總是存在,則可以使用optional:作為前綴 。你可以將此前綴與spring.config.location和
spring.config.additional-location屬性以及spring.config.import聲明一起使用。
例如,spring.config.import值
optional:file:./myconfig.properties允許啟動(dòng)應(yīng)用程序,即使myconfig.properties文件丟失。
如果要忽略所有
ConfigDataLocationNotFoundException并始終繼續(xù)啟動(dòng)應(yīng)用程序,可以使用
spring.config.on-not-found屬性。使用
SpringApplication.setDefaultProperties(...)或使用系統(tǒng)/環(huán)境變量。
1.2 通配符位置
如果配置文件位置包含最后一個(gè)路徑段的*字符,則將其視為通配符位置。在加載配置時(shí),通配符會(huì)展開(kāi),以便同時(shí)檢查直接子目錄。在Kubernetes這樣的環(huán)境中,當(dāng)存在多個(gè)配置屬性源時(shí),通配符位置特別有用。
例如,如果你有一些redis配置和一些MySQL配置,你可能希望將這兩個(gè)配置分開(kāi),同時(shí)要求它們都存在于application.properties文件中。這可能會(huì)導(dǎo)致兩個(gè)單獨(dú)的application.properties文件裝載在不同的位置,例如
/config/redis/application.properties和/config/mysql/application.properties。在這種情況下,如果通配符位置為config/*/,將導(dǎo)致處理這兩個(gè)文件。
默認(rèn)情況下,Spring Boot在默認(rèn)搜索位置包含config/*/。這意味著將搜索jar之外的/config目錄的所有子目錄。
您可以將通配符位置與spring.config.location和
spring.config.additional-location屬性一起使用。
1.3 特定配置文件
除了應(yīng)用程序?qū)傩晕募猓琒pring Boot還將嘗試使用命名約定應(yīng)用程序{profile}加載特定于概要文件的文件。例如,如果應(yīng)用程序激活名為prod的概要文件并使用YAML文件,則將同時(shí)考慮application.yml和application-prod.yml。
特定于配置文件的屬性從與標(biāo)準(zhǔn)application.properties相同的位置加載,特定于配置文件的文件始終覆蓋非特定文件。如果指定了多個(gè)配置文件,則應(yīng)用最后一個(gè)wins策略。例如,如果prod、live(即順序?yàn)椋簆rod, live)配置文件由spring.profiles.active屬性指定,則
application-prod.properties中的值可以被application-live.properties中的值覆蓋。
1.4 導(dǎo)入其它數(shù)據(jù)
應(yīng)用程序?qū)傩钥梢允褂胹pring.config.import屬性從其他位置導(dǎo)入更多配置數(shù)據(jù)。導(dǎo)入會(huì)在發(fā)現(xiàn)時(shí)進(jìn)行處理,并被視為插入聲明導(dǎo)入的文檔下方的附加文檔。
例如:
spring:
config:
import:
- optional:classpath./config/cfg.yml
這里的optional表示可選的,即導(dǎo)入的文件可以不存在;
看如下情況:
cfg.yml配置文件內(nèi)容
cfg:
name: classpath:/config
spring:
config:
import:
- optional:classpath:/config/cfg.yml
---
cfg:
name: a1
這里的a1會(huì)覆蓋import中的值
cfg:
name: a1
---
spring:
config:
import:
- optional:classpath:/config/cfg.yml
這里cfg.yml配置的值會(huì)覆蓋a1值
可以在單個(gè)spring.config.import鍵下指定多個(gè)位置。位置將按照其定義的順序進(jìn)行處理,以后的導(dǎo)入將優(yōu)先。
注意:官方文檔說(shuō)上面的兩種順序配置,產(chǎn)生的是同樣的效果,但是我這測(cè)試的后面的會(huì)替換前面的。
1.5 導(dǎo)入無(wú)擴(kuò)展名文件
某些云平臺(tái)無(wú)法向卷裝載的文件添加文件擴(kuò)展名。要導(dǎo)入這些無(wú)擴(kuò)展文件,您需要給Spring Boot一個(gè)提示,以便它知道如何加載它們。可以通過(guò)將擴(kuò)展提示放在方括號(hào)中來(lái)實(shí)現(xiàn)這一點(diǎn)。
例如,假設(shè)你有一個(gè)/etc/config/myconfig文件,希望將其作為yaml導(dǎo)入。您可以使用以下命令從application.properties導(dǎo)入它:
spring:
config:
import: "file:/etc/config/myconfig[.yaml]"
完畢!!!






