SpringBoot中的配置文件加載優(yōu)先級詳解
springboot配置文件的加載先后順序
1、內(nèi)部配置加載順序
springboot啟動會掃描以下位置的application.properties或者application.yml文件作為Spring boot的默認(rèn)配置文件
- –file:./config/ --> 當(dāng)前項(xiàng)目根目錄下的 config 目錄下
- –file:./ --> 當(dāng)前項(xiàng)目的根目錄下
- –classpath:/config/ --> resources/config目錄下
- –classpath:/ --> resources目錄下
SpringBoot官網(wǎng):
優(yōu)先級由高到底,高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置。
- 如果低優(yōu)先級存在高優(yōu)先級沒有的屬性,則會互補(bǔ)配置。
- 如果同一個(gè)配置屬性,在多個(gè)配置文件都配置了,默認(rèn)使用第1個(gè)讀取到的
這四個(gè)位置是默認(rèn)位置,即 Spring Boot 啟動,默認(rèn)會從這四個(gè)位置按順序去查找相關(guān)屬性并加載。
我們也可以通過 spring.config.location 屬性來手動的指定配置文件位置,指定完成后,系統(tǒng)就會自動去指定目錄下查找 application.properties 文件。
java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/
項(xiàng)目默認(rèn)加載的配置文件名是 application ,我們可以通過屬性 spring.config.name 來指定配置文件的文件名。
使用 spring.config.location 屬性重新定義配置文件的位置,它會覆蓋掉默認(rèn)的四個(gè)位置。使用 spring.config.additional-location 這個(gè)屬性自定義配置文件位置,表示在默認(rèn)的四個(gè)位置的基礎(chǔ)上,再添加幾個(gè)位置,新添加的位置的優(yōu)先級大于原本的位置。 在自定義配置文件位置時(shí),值一定要以 / 結(jié)尾。例如 spring.config.location=classpath:/myconfig/
2、外部配置加載順序
SpringBoot也可以從以下位置加載配置; 優(yōu)先級從高到低;高優(yōu)先級的配置覆蓋低優(yōu)先級的配置,所有的配置會形成互補(bǔ)配置
(1)命令行參數(shù) (加載時(shí)優(yōu)先加載) 所有的配置都可以在命令行上進(jìn)行指定( --配置)。 可以通過指定 --spring.config.location來改變默認(rèn)的配置文件位置:
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.yml
多個(gè)配置用空格分開;格式為: --配置項(xiàng)=值
(2)來自java:comp/env的JNDI屬性
(3)Java系統(tǒng)屬性(在命令行中使用-D指定),可通過System.getProperties()獲得相關(guān)內(nèi)容
java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
(4)操作系統(tǒng)環(huán)境變量
大多數(shù)操作系統(tǒng)不允許使用句點(diǎn)分隔的鍵名,使用下劃線代替(例如,SPRING_CONFIG_NAME代替spring.config.name)
(5)RandomValuePropertySource配置的random.*屬性值
(6)jar包外部的application-{profile}.properties或application-{profile}.yml(帶spring.profile)配置文件。
(7)jar包內(nèi)部的application-{profile}.properties或application-{profile}.yml(帶spring.profile)配置文件。
(8)jar包外部的application.properties或application.yml(不帶spring.profile)配置文件。
(9)jar包內(nèi)部的application.properties或application.yml(不帶spring.profile)配置文件。
(10)@Configuration注解類上的@PropertySource
(11)通過SpringApplication.setDefaultProperties指定的默認(rèn)屬性
其中常用的為:(1)(6)(7)(8)(9)(10)
總結(jié)
- 優(yōu)先加載操作系統(tǒng)層面的配置、命令行
- 由jar包外向jar包內(nèi)進(jìn)行尋找,優(yōu)先查找config目錄。
- 優(yōu)先加載帶profile(application-{profile}.yml)的,后加載不帶profile(application.yml)的
- 高優(yōu)先級的配置覆蓋低優(yōu)先級的配置,所有的配置會形成互補(bǔ)配置
3、遠(yuǎn)程配置中心
以Nacos為例:默認(rèn)遠(yuǎn)程配置優(yōu)先級最高
可以通過在遠(yuǎn)程配置中心中做如下配置,設(shè)置本地配置覆蓋遠(yuǎn)程配置:
spring: cloud: config: # 是否允許本地配置覆蓋遠(yuǎn)程配置 allow-override: true # 是否一切以本地配置為準(zhǔn),默認(rèn)false override-none: false # 系統(tǒng)環(huán)境變量或系統(tǒng)屬性才能覆蓋遠(yuǎn)程配置文件的配置 # 本地配置文件中配置優(yōu)先級低于遠(yuǎn)程配置,默認(rèn)true override-system-properties: true
到此這篇關(guān)于SpringBoot中的配置文件加載優(yōu)先級詳解的文章就介紹到這了,更多相關(guān)SpringBoot配置文件優(yōu)先級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot無法加載yml配置文件的解決方案
- SpringBoot使用不同環(huán)境動態(tài)加載不同配置文件
- SpringBoot配置文件啟動加載順序的方法步驟
- SpringBoot配置文件的優(yōu)先級順序、加載順序、bootstrap.yml與application.yml區(qū)別及說明
- SpringBoot項(xiàng)目部署時(shí)application.yml文件的加載優(yōu)先級和啟動腳本問題
- SpringBoot加載不出來application.yml文件的解決方法
- SpringBoot項(xiàng)目加載配置文件的6種方式小結(jié)
- SpringBoot實(shí)現(xiàn)配置文件自動加載和刷新的示例詳解
- SpringBoot的配置文件application.yml及加載順序詳解
- springboot加載配值文件的實(shí)現(xiàn)步驟
相關(guān)文章
mybatis3中@SelectProvider傳遞參數(shù)方式
這篇文章主要介紹了mybatis3中@SelectProvider傳遞參數(shù)方式。具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08java雙端隊(duì)列之ArrayDequeue原理講解
這篇文章主要為大家介紹了java雙端隊(duì)列之ArrayDequeue原理講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06java中實(shí)現(xiàn)map與對象相互轉(zhuǎn)換的幾種實(shí)現(xiàn)
這篇文章主要介紹了java中實(shí)現(xiàn)map與對象相互轉(zhuǎn)換的幾種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Spring Boot Web 靜態(tài)文件緩存處理的方法
本篇文章主要介紹了Spring Boot Web 靜態(tài)文件緩存處理的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02java環(huán)境配好后jar文件打開命令框閃退(無打開方式,無反應(yīng))解決辦法
在Java開發(fā)中我們經(jīng)常會遇到運(yùn)行Jar包時(shí)閃退的問題,下面這篇文章主要給大家介紹了關(guān)于java環(huán)境配好后jar文件打開命令框閃退(無打開方式,無反應(yīng))的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04淺析打開eclipse出現(xiàn)Incompatible JVM的解決方法
本篇文章是對打開eclipse出現(xiàn)Incompatible JVM的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)
我們經(jīng)常會遇到需要傳遞對象的場景,有時(shí)候,我們需要將一個(gè)對象的數(shù)據(jù)傳遞給另一個(gè)對象進(jìn)行處理,但是又不希望直接暴露對象的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié),所以本文給大家介紹了SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù),需要的朋友可以參考下2024-03-03