SpringBoot配置文件加载顺序与优先级的详细步骤

 更新时间:2026年01月16日 09:49:27   作者:程序员码小跳  
在 Spring Boot 应用中,配置文件的加载顺序和优先级决定了最终生效的配置值,理解这一机制对于正确管理应用配置至关重要,所以本文给大家介绍了SpringBoot配置文件加载顺序与优先级的详细步骤,需要的朋友可以参考下

1. 概述

在 Spring Boot 应用中,配置文件的加载顺序和优先级决定了最终生效的配置值。理解这一机制对于正确管理应用配置至关重要,特别是在复杂的多模块项目中,配置文件的组织和优先级关系直接影响应用的行为。

2. 配置文件加载机制

比如我们定义了如下的 profile 配置:

profiles:
  active: ${PROFILES_ACTIVE:local}
  include: security,xxl-job,flyway,default,file,${NIMBUS_DB_TYPE:postgresql}

这个配置定义了主配置文件和需要额外加载的配置文件集合。Spring Boot 会按照特定的顺序加载这些配置文件,并根据优先级规则决定最终的配置值。

3. 配置文件优先级规则详解

Spring Boot 遵循以下优先级顺序,数字越小优先级越高,后加载的配置会覆盖先加载的同名配置:

3.1 最高优先级配置文件

application-{active_profile}.yaml

  - 优先级最高
  - 这是当前激活的 profile 对应的配置文件
  - 此文件中的配置会覆盖其他所有配置文件中的同名配置

3.2 通过 include 指令加载的配置文件

按 include 列表中的顺序依次加载,后加载的配置文件会覆盖先加载的同名配置

3.2.1 [application-security.yaml]- list中优先级最低

  • 首先加载安全相关的配置
  • 包含认证、授权等安全相关配置项
  • 在后续配置文件加载时可能被覆盖

3.2.2 [application-xxl-job.yaml]- 优先级中等偏低

  • 加载分布式任务调度框架 XXL-JOB 的相关配置
  • 可能覆盖安全配置中的某些属性

3.2.3 [application-flyway.yaml】 优先级中等

  • 加载数据库迁移工具 Flyway 的配置
  • 通常包含数据库迁移相关的属性

3.2.4 [application-default.yaml] - 优先级中等偏高

  • 加载默认配置
  • 通常包含通用的默认设置

3.2.5 [application-file.yaml]- 优先级较高

  • 加载文件服务相关的配置
  • 可能覆盖之前的通用配置

3.2.6 [application-postgresql.yaml] - 优先级最高(在 include 列表中)

  • 最后加载数据库配置
  • 由于是 include 列表中最后一个加载的文件,它的配置会覆盖 include 列表中其他文件的同名配置
  • 但仍然低于 [application-{active_profile}.yaml]

3.3 基础配置文件

  • [application.yaml] 最终的基础配置
  • 作为兜底配置,提供最基本的配置项
  • 优先级最低,容易被其他配置文件覆盖

4. 配置覆盖规则详解

4.1 属性覆盖原则

  • 在不同优先级的配置文件中,相同属性名的值会按照优先级规则进行覆盖
  • 高优先级配置文件中的属性值会覆盖低优先级配置文件中的同名属性值
  • 例如,如果 [application-security.yaml]中定义了 server.port=9001,而 [application-postgresql.yaml]中定义了 server.port=9002,则最终生效的端口将是 9002

4.2 Profile 特定配置优先级

  • [application-{profile}.properties] 优先级最高高
  • 这意味着特定环境的配置总是优先于通用配置

4.3 配置属性的合并行为

  • 对于复合类型的配置(如 lists, maps),Spring Boot 会根据属性来源进行合并或替换
  • 简单属性(String, int, boolean 等)直接被高优先级配置覆盖
  • 复杂属性可能涉及合并逻辑,需要注意配置设计

4.4 具体配置覆盖示例

假设有以下配置项分布在不同文件中:

[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 (最高优先级)
logging:
  level:
    com.nimbus: INFO  # 来自 application-local.yaml (最高优先级)
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb  # 来自 application-postgresql.yaml

以上就是SpringBoot配置文件加载顺序与优先级的详细步骤的详细内容,更多关于SpringBoot文件加载顺序与优先级配置的资料请关注脚本之家其它相关文章!

相关文章

  • 一文了解Java 线程池的正确使用姿势

    一文了解Java 线程池的正确使用姿势

    线程池在平时的工作中出场率非常高,基本大家多多少少都要了解过,可能不是很全面,本文和大家基于jdk8学习下线程池的全面使用,以及分享下使用过程中遇到的一些坑,希望对大家有所帮助
    2022-10-10
  • Java图片裁剪和生成缩略图的实例方法

    Java图片裁剪和生成缩略图的实例方法

    这篇文章主要介绍了Java图片裁剪和生成缩略图的实例方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Java面试重点中的重点之Elasticsearch核心原理

    Java面试重点中的重点之Elasticsearch核心原理

    ElasticSearch是一个基于Lucene的搜索引擎,是用Java语言开发的,能够达到实时搜索,稳定,可靠,快速,安装使用方便,作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎,是最受欢迎的企业搜索引擎
    2022-01-01
  • java多线程中的异常处理机制简析

    java多线程中的异常处理机制简析

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉,需要了解的朋友可以参考下
    2012-11-11
  • Java ArrayList深入源码层分析

    Java ArrayList深入源码层分析

    Java中容器对象主要用来存储其他对象,根据实现原理不同,主要有3类常用的容器对象:ArrayList使用数组结构存储容器中的元素、LinkedList使用链表结构存储容器中的元素
    2023-01-01
  • idea中将单个java类导出为jar包文件的方法

    idea中将单个java类导出为jar包文件的方法

    这篇文章主要给大家介绍了关于idea中将单个java类导出为jar包文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • java基本教程之synchronized关键字 java多线程教程

    java基本教程之synchronized关键字 java多线程教程

    这篇文章主要介绍了java的synchronized原理、synchronized基本规则、synchronized方法 和 synchronized代码块、实例锁和全局锁
    2014-01-01
  • 详解SpringBoot整合MyBatis详细教程

    详解SpringBoot整合MyBatis详细教程

    这篇文章主要介绍了详解SpringBoot整合MyBatis详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • spring boot+thymeleaf+bootstrap实现后台管理系统界面

    spring boot+thymeleaf+bootstrap实现后台管理系统界面

    这篇文章主要为大家详细介绍了spring boot+thymeleaf+bootstrap简单实现后台管理系统界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • springMvc异步的DeferredResult long polling应用示例解析

    springMvc异步的DeferredResult long polling应用示例解析

    这篇文章主要为大家介绍了springMvc中DeferredResult的long polling应用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03

最新评论