Spring Boot中application配置文件的生效顺序及应用范围

 更新时间:2024年03月18日 14:49:27   作者:程序员三木  
Spring Boot的一个重要特性就是它的自动配置,这一特性在很大程度上依赖于名称为application的配置文件,本文将详细介绍在Spring Boot中,这些配置文件的加载顺序以及每份文件的应用范围,需要的朋友可以参考下

Spring Boot中application配置文件的生效顺序

Spring Boot的一个重要特性就是它的自动配置,这一特性在很大程度上依赖于名称为application的配置文件。本文将详细介绍在Spring Boot中,这些配置文件的加载顺序以及每份文件的应用范围。

配置文件的种类

在Spring Boot中,我们主要使用两种类型的配置文件:

  • application.properties
  • application.yml

这两种文件都用于定义项目的配置参数,只是书写格式不同。其中,application.properties采用“键=值”的格式,而application.yml采用了YAML(YAML Ain’t Markup Language)语言的格式,设置更为清晰和明了。

配置文件的加载顺序

当项目启动时,Spring Boot会按照一定的顺序去加载这些配置文件。以下是这些配置文件的默认加载顺序:

  • 在当前目录下的/config子目录的application配置文件
  • 在当前目录下的application配置文件
  • 在类路径(classpath)下的/config子目录的application配置文件
  • 在类路径(classpath)下的application配置文件

其中,列表中序号越小的配置文件优先级越高。也就是说,如果在不同的application配置文件中定义了相同的属性,那么,优先级更高的配置文件中定义的值会覆盖优先级较低的配置文件中定义的值。

配置文件的环境切换

除了主要的application配置文件之外,我们还可以为每个环境提供专门的配置文件。这些环境特定的配置文件的名称格式为application-{profile}.properties或application-{profile}.yml,其中的{profile}表示特定的环境。例如,我们可以为开发环境定义一个application-dev.properties文件,为生产环境定义一个application-prod.properties文件。

与普通的配置文件一样,环境特定的配置文件也有一定的加载顺序,但它们的加载时机是在对应的application配置文件加载之后。也就是说,如果环境特定的配置文件中定义了与application配置文件相同的属性,那么环境特定的配置文件中的值将会覆盖application配置文件中的值。

参考资源:

  1. Config file processing in Spring Boot 2.4
  2. Order of Configuration in SpringBoot
  3. Spring Boot Externalized Configuration

扩展:

SpringBoot配置文件application.yml及加载顺序

配置文件分类

1. SpringBoot中4级配置文件

  • 1级(工程路径config目录配置文件):file:config/application.yml [最高]
  • 2级(工程路径目录配置文件):file:application.yml
  • 3级(项目类路径config目录配置文件):classpath:config/application.yml
  • 4级(项目类路径目录配置文件):classpath:application.yml [最低]

2. 作用:

  • 1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控,2级服务于运维人员配置涉密线上环境
  • 3级和4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控,4级服务于开发人员本机开发与测试

3. 注意:

多层级配置文件间的属性采用叠加并覆盖的形式作用于程序。

自定义配置文件

\1. 配置文件可以修改名称,通过启动参数设定

\2. 配置文件可以修改路径,通过启动参数设定

3.微服务开发中配置文件通过配置中心进行设置

配置文件总结

\1. SpringBoot在开发和运行环境均支持使用临时参数修改工程配置

\2. SpringBoot支持4级配置文件,应用于开发与线上环境进行配置的灵活设置

\3. SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置

4.基于微服务开发时配置文件将使用配置中心进行管理

Springboot中application.yml、application.properties和bootStrap.yml加载顺序

SpringApplication位于项目根目录

所以所有得代码要和SpringApplication所在目录平级或下一级

以jar包发布springboot项目时

默认会先使用jar包跟目录下的application.properties来作为项目配置文件。

如果在不同的目录中存在多个配置文件,它的读取顺序是:

  • 1、config/application.properties(项目根目录中config目录下)
  • 2、config/application.yml
  • 3、application.properties(项目根目录下)
  • 4、application.yml
  • 5、resources/config/application.properties(项目resources目录中config目录下)
  • 6、resources/config/application.yml
  • 7、resources/application.properties(项目的resources目录下)
  • 8、resources/application.yml

**注: **

1、如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。

2、如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。

3、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”

4、先后加载顺序:若application 和bootstrap 在同一目录下:bootstrap先加载 application后加载

若application.yml 和bootStrap.yml 在同目录下

则bootStrap.yml 的加载顺序要于application.yml,即bootStrap.yml 会优先被加载。

原理:

bootstrap.yml 于应程序上下的引导阶段。

bootstrap.yml 由Spring ApplicationContext加载。

  • bootstrap.yml 可以理解成系统级别的⼀些参数配置,这些参数⼀般是不会变动的。
  • application.yml 可以⽤来定义应⽤级别的,如果搭配 spring-cloud-config 使用 application.yml 定义的文件可以实现动态替换。

到此这篇关于Spring Boot中application配置文件的生效顺序的文章就介绍到这了,更多相关Spring Boot application配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Java实现获取文件MD5值工具类

    使用Java实现获取文件MD5值工具类

    我们在工作中通常使用MD5对文件进行校验完整性,比较,提高安全性等,这篇文章主要为大家详细介绍了Java如何编写一个实现获取文件MD5值的工具,需要的可以参考下
    2023-12-12
  • SpringBoot集成MyBatis中SQL拦截器的实战指南

    SpringBoot集成MyBatis中SQL拦截器的实战指南

    这篇文章主要为大家详细介绍了SpringBoot集成MyBatis中SQL拦截器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • 一次java异步任务的实战记录

    一次java异步任务的实战记录

    最近做项目的时候遇到了一个小问题,从前台提交到服务端A,A调用服务端B处理超时,下面这篇文章主要给大家介绍了一次java异步任务的实战记录,需要的朋友可以参考下
    2022-05-05
  • Java轻量级权限认证框架Sa-Token的使用

    Java轻量级权限认证框架Sa-Token的使用

    Sa-Token是一个轻量级Java权限认证框架,本文就详细的来介绍一下Java轻量级权限认证框架Sa-Token的使用,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权等,感兴趣的可以了解一下
    2022-03-03
  • Java如何高效使用OpenCV图像处理库

    Java如何高效使用OpenCV图像处理库

    OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能,这篇文章主要给大家介绍了关于Java如何高效使用OpenCV图像处理库的相关资料,需要的朋友可以参考下
    2024-03-03
  • CountDownLatch和Atomic原子操作类源码解析

    CountDownLatch和Atomic原子操作类源码解析

    这篇文章主要为大家介绍了CountDownLatch和Atomic原子操作类的源码解析以及理解应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 常用java正则表达式的工具类

    常用java正则表达式的工具类

    这篇文章主要为大家详细介绍了常用java正则表达式的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 浅谈Spring Boot中如何干掉if else的方法

    浅谈Spring Boot中如何干掉if else的方法

    这篇文章主要介绍了Spring Boot中如何干掉if else的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • JAVA实现Token自动续期机制的示例代码

    JAVA实现Token自动续期机制的示例代码

    本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴趣的可以了解一下
    2025-09-09
  • 这一次搞懂Spring事务是如何传播的

    这一次搞懂Spring事务是如何传播的

    这篇文章主要介绍了这一次搞懂Spring事务是如何传播的,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论