SpringBoot中的配置文件加載優(yōu)先級(jí)詳解
springboot配置文件的加載先后順序
1、內(nèi)部配置加載順序
springboot啟動(dòng)會(huì)掃描以下位置的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)先級(jí)由高到底,高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先級(jí)的配置。
- 如果低優(yōu)先級(jí)存在高優(yōu)先級(jí)沒(méi)有的屬性,則會(huì)互補(bǔ)配置。
- 如果同一個(gè)配置屬性,在多個(gè)配置文件都配置了,默認(rèn)使用第1個(gè)讀取到的
這四個(gè)位置是默認(rèn)位置,即 Spring Boot 啟動(dòng),默認(rèn)會(huì)從這四個(gè)位置按順序去查找相關(guān)屬性并加載。
我們也可以通過(guò) spring.config.location 屬性來(lái)手動(dòng)的指定配置文件位置,指定完成后,系統(tǒng)就會(huì)自動(dòng)去指定目錄下查找 application.properties 文件。
java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/
項(xiàng)目默認(rèn)加載的配置文件名是 application ,我們可以通過(guò)屬性 spring.config.name 來(lái)指定配置文件的文件名。
使用 spring.config.location 屬性重新定義配置文件的位置,它會(huì)覆蓋掉默認(rèn)的四個(gè)位置。使用 spring.config.additional-location 這個(gè)屬性自定義配置文件位置,表示在默認(rèn)的四個(gè)位置的基礎(chǔ)上,再添加幾個(gè)位置,新添加的位置的優(yōu)先級(jí)大于原本的位置。 在自定義配置文件位置時(shí),值一定要以 / 結(jié)尾。例如 spring.config.location=classpath:/myconfig/
2、外部配置加載順序
SpringBoot也可以從以下位置加載配置; 優(yōu)先級(jí)從高到低;高優(yōu)先級(jí)的配置覆蓋低優(yōu)先級(jí)的配置,所有的配置會(huì)形成互補(bǔ)配置
(1)命令行參數(shù) (加載時(shí)優(yōu)先加載) 所有的配置都可以在命令行上進(jìn)行指定( --配置)。 可以通過(guò)指定 --spring.config.location來(lái)改變默認(rèn)的配置文件位置:
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.yml
多個(gè)配置用空格分開(kāi);格式為: --配置項(xiàng)=值
(2)來(lái)自java:comp/env的JNDI屬性
(3)Java系統(tǒng)屬性(在命令行中使用-D指定),可通過(guò)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)通過(guò)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)先級(jí)的配置覆蓋低優(yōu)先級(jí)的配置,所有的配置會(huì)形成互補(bǔ)配置
3、遠(yuǎn)程配置中心
以Nacos為例:默認(rèn)遠(yuǎn)程配置優(yōu)先級(jí)最高
可以通過(guò)在遠(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)先級(jí)低于遠(yuǎn)程配置,默認(rèn)true
override-system-properties: true
到此這篇關(guān)于SpringBoot中的配置文件加載優(yōu)先級(jí)詳解的文章就介紹到這了,更多相關(guān)SpringBoot配置文件優(yōu)先級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JDBC實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了JDBC實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
java ArrayList集合中的某個(gè)對(duì)象屬性進(jìn)行排序的實(shí)現(xiàn)代碼
這篇文章主要介紹了java ArrayList集合中的某個(gè)對(duì)象屬性進(jìn)行排序的實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-07-07
SpringBoot項(xiàng)目整合OpenFeign啟動(dòng)失敗及運(yùn)行時(shí)常見(jiàn)錯(cuò)誤解決方案
文章總結(jié)了在使用Feign進(jìn)行服務(wù)調(diào)用時(shí)可能遇到的常見(jiàn)問(wèn)題及其解決方案,涵蓋了依賴配置、接口定義、運(yùn)行時(shí)錯(cuò)誤和其它常見(jiàn)問(wèn)題的解決方法,建議使用兼容的版本、統(tǒng)一的包名結(jié)構(gòu),并為接口方法添加HTTP注解,感興趣的朋友跟隨小編一起看看吧2026-01-01
Java使用WebFlux調(diào)用大模型實(shí)現(xiàn)智能對(duì)話
這篇文章主要為大家詳細(xì)介紹了Java如何使用WebFlux調(diào)用大模型實(shí)現(xiàn)智能對(duì)話效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-06-06
SpringBoot創(chuàng)建JSP登錄頁(yè)面功能實(shí)例代碼
這篇文章主要介紹了SpringBoot創(chuàng)建JSP登錄頁(yè)面功能實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04
Spring和Websocket相結(jié)合實(shí)現(xiàn)消息的推送
這篇文章主要介紹了Spring和Websocket相結(jié)合實(shí)現(xiàn)消息的推送的相關(guān)資料,本文介紹的非常詳細(xì)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02
Java 基礎(chǔ):string中的compareTo方法
這篇文章主要介紹了Java 基礎(chǔ):string中的compareTo方法,文章圍繞string中的compareTo方法的相關(guān)資料展開(kāi)文章詳細(xì)內(nèi)容,希望對(duì)待大家有所幫助2021-12-12

