最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你深入了解SpringBoot配置文件的優(yōu)先級

 更新時間:2026年04月07日 09:02:14   作者:Full?Stack?Developme  
這篇文章主要為大家詳細介紹了SpringBoot中配置文件的優(yōu)先級以及實際應用建議,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

一、基礎優(yōu)先級順序

1. 文件位置優(yōu)先級(從高到低)

1. 當前目錄的 /config 子目錄
   └── ./config/
2. 當前目錄
   └── ./
3. classpath 下的 /config 包
   └── classpath:/config/
4. classpath 根路徑
   └── classpath:/

2. 文件類型優(yōu)先級

在同一目錄下,如果有多個配置文件,優(yōu)先級順序為:

application.properties > application.yml

示例:如果 application.properties 和 application.yml 在同一個目錄,application.properties 中的配置會覆蓋 application.yml 中相同的配置。

二、多環(huán)境配置優(yōu)先級

1. 多環(huán)境文件命名規(guī)則

application-{profile}.properties
application-{profile}.yml

2. 完整優(yōu)先級順序(從高到低)

1. 命令行參數
   └── java -jar app.jar --server.port=8081
2. 環(huán)境變量(操作系統(tǒng)級)
   └── export SERVER_PORT=8081
3. 特定 Profile 的配置文件(按位置優(yōu)先級)
   └── application-dev.properties(或 yml)
4. 默認配置文件
   └── application.properties(或 yml)
5. Spring Boot 內置默認配置

3. 多環(huán)境配置示例

假設有 dev、prod、test 三個環(huán)境:

# application.properties(默認配置)
server.port=8080
app.name=MyApp
# application-dev.properties
server.port=8081
app.debug=true
# application-prod.properties
server.port=80
app.debug=false

讀取規(guī)則

使用 spring.profiles.active=dev 時

  • 先讀取 application.properties
  • 再讀取 application-dev.properties,覆蓋相同屬性
  • 最終 server.port=8081

三、重復覆蓋順序詳解

1. 不同位置配置文件的覆蓋

假設存在以下位置的配置文件:

# 位置1: classpath:/application.properties
server.port=8080

# 位置2: classpath:/config/application.properties
server.port=8081

# 位置3: ./application.properties
server.port=8082

# 位置4: ./config/application.properties
server.port=8083

最終生效順序:位置4 > 位置3 > 位置2 > 位置1

最終端口:8083

2. 不同格式配置文件的覆蓋

# application.yml
server:
  port: 8080
  servlet:
    context-path: /api
properties
# application.properties
server.port=8081

結果

  • server.port=8081(properties 覆蓋 yml)
  • server.servlet.context-path=/api(保持不變)

3. 多環(huán)境 + 多位置的復雜覆蓋

# classpath:/application.properties
server.port=8080

# classpath:/application-dev.properties
server.port=8081

# classpath:/config/application.properties
server.port=8082

# classpath:/config/application-dev.properties
server.port=8083

使用 --spring.profiles.active=dev 時:

加載順序:

  • classpath:/application.properties (8080)
  • classpath:/config/application.properties (8082) - 覆蓋
  • classpath:/application-dev.properties (8081) - 覆蓋
  • classpath:/config/application-dev.properties (8083) - 覆蓋

最終端口:8083

四、配置加載順序完整清單

Spring Boot 配置加載順序(從高到低):

1. 命令行參數

2. Java 系統(tǒng)屬性 (System.getProperties())

3. 操作系統(tǒng)環(huán)境變量

4. JNDI 屬性 (java:comp/env)

5. RandomValuePropertySource (random.* 屬性)

6. 特定 Profile 的配置文件(jar 包外)

7. 特定 Profile 的配置文件(jar 包內)

8. 默認配置文件(jar 包外)

9. 默認配置文件(jar 包內)

10. @PropertySource 注解配置

11. SpringApplication 默認屬性

五、實際應用建議

1. 配置文件組織示例

項目結構:

├── src/main/resources/
│   ├── application.yml              # 通用配置
│   ├── application-dev.yml          # 開發(fā)環(huán)境
│   ├── application-test.yml         # 測試環(huán)境
│   └── application-prod.yml         # 生產環(huán)境
└── config/                          # 外部配置目錄(生產環(huán)境)
    └── application-prod.yml          # 覆蓋內部配置

2. 優(yōu)先級最佳實踐

# 1. 使用 application.yml 存放默認配置
spring:
  profiles:
    active: dev
  application:
    name: my-service
# 2. 環(huán)境特定配置放在 application-{profile}.yml
# application-dev.yml
server:
  port: 8080
  servlet:
    context-path: /dev
# 3. 敏感信息通過環(huán)境變量或命令行覆蓋
# java -jar app.jar --db.password=${DB_PASSWORD}

3. 驗證配置優(yōu)先級的代碼示例

@Component
public class ConfigPrinter implements ApplicationRunner {
    @Value("${server.port}")
    private String port;
    @Value("${app.name:default}")
    private String appName;
    @Autowired
    private Environment environment;
    @Override
    public void run(ApplicationArguments args) {
        System.out.println("Server Port: " + port);
        System.out.println("App Name: " + appName);
        // 查看所有激活的配置文件
        Arrays.stream(environment.getActiveProfiles())
            .forEach(profile -> System.out.println("Active Profile: " + profile));
    }
}

六、特殊情況處理

1. 使用 spring.config.location 強制指定

java -jar app.jar --spring.config.location=/opt/config/application.yml

此時只加載指定位置的配置文件,其他位置不加載。

2. 使用 spring.config.additional-location 補充

java -jar app.jar --spring.config.additional-location=/opt/config/

額外添加配置位置,仍然會加載默認位置的配置。

3. 配置文件的合并規(guī)則

  • 簡單類型:后面的覆蓋前面的
  • 集合/Map類型:完全覆蓋,不是合并
  • 對象類型:屬性級別的覆蓋

示例

# application.yml
app:
  config:
    key1: value1
    key2: value2
# application-dev.yml
app:
  config:
    key1: new-value1

結果:只有 key1 被覆蓋,key2 仍然保留。

理解這些優(yōu)先級規(guī)則對于管理復雜的 Spring Boot 應用配置非常重要,可以避免配置沖突和意外的行為。

到此這篇關于一文帶你深入了解SpringBoot配置文件的優(yōu)先級的文章就介紹到這了,更多相關SpringBoot配置文件優(yōu)先級內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用JavaConfig配置Spring的流程步驟

    使用JavaConfig配置Spring的流程步驟

    JavaConfig 是 Spring 框架提供的一種基于 Java 的配置方式,它通過使用 @Configuration 注解標記的類來替代傳統(tǒng)的 XML 配置文件,本文給大家介紹了使用JavaConfig配置Spring的流程步驟,需要的朋友可以參考下
    2025-05-05
  • 本地JDK多版本快速切換方案

    本地JDK多版本快速切換方案

    本文將詳細介紹如何在同一臺機器上安裝和配置多個版本的 JDK(JDK 8、JDK 17 和 JDK 21),并且使用綠色版(即無需安裝程序,直接解壓即可使用),通過這種方式,您可以在不同的項目中靈活選擇所需的 JDK 版本,需要的朋友可以參考下
    2025-03-03
  • 基于Java + OpenClaw搭建本地大模型私有化的方案

    基于Java + OpenClaw搭建本地大模型私有化的方案

    數據不出內網、模型本地跑、代碼自己控——本文這套方案教你用Java+OpenClaw搭建企業(yè)級私有AI中樞,告別數據裸奔,讓核心資料安心喂給AI,需要的朋友可以參考下
    2026-03-03
  • 利用Java工具類Hutool實現(xiàn)驗證碼校驗功能

    利用Java工具類Hutool實現(xiàn)驗證碼校驗功能

    這篇文章主要介紹了利用Java工具類Hutool實現(xiàn)驗證碼校驗功能,利用Hutool實現(xiàn)驗證碼校驗,校驗的Servlet與今天的第一篇是一樣的,唯一就是驗證碼的生成是不一樣的,利用Hutool生成驗證碼更快捷.需要的朋友可以參考下
    2022-10-10
  • 關于ConditionalOnMissingBean失效問題的追蹤

    關于ConditionalOnMissingBean失效問題的追蹤

    這篇文章主要介紹了關于ConditionalOnMissingBean失效問題的追蹤方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • mybatis動態(tài)sql之Map參數的講解

    mybatis動態(tài)sql之Map參數的講解

    今天小編就為大家分享一篇關于mybatis動態(tài)sql之Map參數的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理分析

    spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理分析

    這篇文章主要介紹了spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • java并發(fā)使用CountDownLatch在生產環(huán)境翻車剖析

    java并發(fā)使用CountDownLatch在生產環(huán)境翻車剖析

    這篇文章主要為大家介紹了java并發(fā)使用CountDownLatch在生產環(huán)境翻車的示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • java中的序列化解析

    java中的序列化解析

    這篇文章主要介紹了java中的序列化解析,為了將對象進行網絡傳輸或者是持久化,我們需要將對象的狀態(tài)信息轉換為可以存儲或者傳輸的形式,這個轉換的過程就叫序列化,需要的朋友可以參考下
    2023-09-09
  • 關于break和continue以及l(fā)abel的區(qū)別和作用(詳解)

    關于break和continue以及l(fā)abel的區(qū)別和作用(詳解)

    下面小編就為大家?guī)硪黄P于break和continue以及l(fā)abel的區(qū)別和作用(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

喀喇沁旗| 华容县| 无极县| 乌兰县| 佳木斯市| 梅州市| 泸水县| 西乌| 平陆县| 齐齐哈尔市| 皋兰县| 花莲市| 玛纳斯县| 平顺县| 邻水| 大荔县| 雷山县| 策勒县| 永宁县| 桐梓县| 化州市| 新邵县| 青田县| 抚顺县| 石嘴山市| 威信县| 太湖县| 柳林县| 噶尔县| 许昌县| 永清县| 城市| 旺苍县| 屯留县| 信宜市| 满洲里市| 岚皋县| 横峰县| 拉萨市| 和林格尔县| 平谷区|