SpringBoot配置文件加載順序與優(yōu)先級的詳細(xì)步驟
1. 概述
在 Spring Boot 應(yīng)用中,配置文件的加載順序和優(yōu)先級決定了最終生效的配置值。理解這一機(jī)制對于正確管理應(yīng)用配置至關(guān)重要,特別是在復(fù)雜的多模塊項(xiàng)目中,配置文件的組織和優(yōu)先級關(guān)系直接影響應(yīng)用的行為。
2. 配置文件加載機(jī)制
比如我們定義了如下的 profile 配置:
profiles:
active: ${PROFILES_ACTIVE:local}
include: security,xxl-job,flyway,default,file,${NIMBUS_DB_TYPE:postgresql}
這個(gè)配置定義了主配置文件和需要額外加載的配置文件集合。Spring Boot 會按照特定的順序加載這些配置文件,并根據(jù)優(yōu)先級規(guī)則決定最終的配置值。
3. 配置文件優(yōu)先級規(guī)則詳解
Spring Boot 遵循以下優(yōu)先級順序,數(shù)字越小優(yōu)先級越高,后加載的配置會覆蓋先加載的同名配置:
3.1 最高優(yōu)先級配置文件
application-{active_profile}.yaml
- 優(yōu)先級最高
- 這是當(dāng)前激活的 profile 對應(yīng)的配置文件
- 此文件中的配置會覆蓋其他所有配置文件中的同名配置
3.2 通過 include 指令加載的配置文件
按 include 列表中的順序依次加載,后加載的配置文件會覆蓋先加載的同名配置:
3.2.1 [application-security.yaml]- list中優(yōu)先級最低
- 首先加載安全相關(guān)的配置
- 包含認(rèn)證、授權(quán)等安全相關(guān)配置項(xiàng)
- 在后續(xù)配置文件加載時(shí)可能被覆蓋
3.2.2 [application-xxl-job.yaml]- 優(yōu)先級中等偏低
- 加載分布式任務(wù)調(diào)度框架 XXL-JOB 的相關(guān)配置
- 可能覆蓋安全配置中的某些屬性
3.2.3 [application-flyway.yaml】 優(yōu)先級中等
- 加載數(shù)據(jù)庫遷移工具 Flyway 的配置
- 通常包含數(shù)據(jù)庫遷移相關(guān)的屬性
3.2.4 [application-default.yaml] - 優(yōu)先級中等偏高
- 加載默認(rèn)配置
- 通常包含通用的默認(rèn)設(shè)置
3.2.5 [application-file.yaml]- 優(yōu)先級較高
- 加載文件服務(wù)相關(guān)的配置
- 可能覆蓋之前的通用配置
3.2.6 [application-postgresql.yaml] - 優(yōu)先級最高(在 include 列表中)
- 最后加載數(shù)據(jù)庫配置
- 由于是 include 列表中最后一個(gè)加載的文件,它的配置會覆蓋 include 列表中其他文件的同名配置
- 但仍然低于 [application-{active_profile}.yaml]
3.3 基礎(chǔ)配置文件
- [application.yaml] 最終的基礎(chǔ)配置
- 作為兜底配置,提供最基本的配置項(xiàng)
- 優(yōu)先級最低,容易被其他配置文件覆蓋
4. 配置覆蓋規(guī)則詳解
4.1 屬性覆蓋原則
- 在不同優(yōu)先級的配置文件中,相同屬性名的值會按照優(yōu)先級規(guī)則進(jìn)行覆蓋
- 高優(yōu)先級配置文件中的屬性值會覆蓋低優(yōu)先級配置文件中的同名屬性值
- 例如,如果 [application-security.yaml]中定義了
server.port=9001,而 [application-postgresql.yaml]中定義了server.port=9002,則最終生效的端口將是 9002
4.2 Profile 特定配置優(yōu)先級
- [application-{profile}.properties] 優(yōu)先級最高高
- 這意味著特定環(huán)境的配置總是優(yōu)先于通用配置
4.3 配置屬性的合并行為
- 對于復(fù)合類型的配置(如 lists, maps),Spring Boot 會根據(jù)屬性來源進(jìn)行合并或替換
- 簡單屬性(String, int, boolean 等)直接被高優(yōu)先級配置覆蓋
- 復(fù)雜屬性可能涉及合并邏輯,需要注意配置設(shè)計(jì)
4.4 具體配置覆蓋示例
假設(shè)有以下配置項(xiàng)分布在不同文件中:
[application-security.yaml]:
server:
port: 9001
logging:
level:
com.nimbus: DEBUG
[application-postgresql.yaml]
server:
port: 9002
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
[application-local.yaml]
server:
port: 9003
logging:
level:
com.nimbus: INFO
最終生效的配置:
server:
port: 9003 # 來自 application-local.yaml (最高優(yōu)先級)
logging:
level:
com.nimbus: INFO # 來自 application-local.yaml (最高優(yōu)先級)
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb # 來自 application-postgresql.yaml以上就是SpringBoot配置文件加載順序與優(yōu)先級的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot文件加載順序與優(yōu)先級配置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java面試重點(diǎn)中的重點(diǎn)之Elasticsearch核心原理
ElasticSearch是一個(gè)基于Lucene的搜索引擎,是用Java語言開發(fā)的,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便,作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎,是最受歡迎的企業(yè)搜索引擎2022-01-01
idea中將單個(gè)java類導(dǎo)出為jar包文件的方法
這篇文章主要給大家介紹了關(guān)于idea中將單個(gè)java類導(dǎo)出為jar包文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
java基本教程之synchronized關(guān)鍵字 java多線程教程
這篇文章主要介紹了java的synchronized原理、synchronized基本規(guī)則、synchronized方法 和 synchronized代碼塊、實(shí)例鎖和全局鎖2014-01-01
spring boot+thymeleaf+bootstrap實(shí)現(xiàn)后臺管理系統(tǒng)界面
這篇文章主要為大家詳細(xì)介紹了spring boot+thymeleaf+bootstrap簡單實(shí)現(xiàn)后臺管理系統(tǒng)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
springMvc異步的DeferredResult long?polling應(yīng)用示例解析
這篇文章主要為大家介紹了springMvc中DeferredResult的long?polling應(yīng)用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03

