Spring Boot的配置文件加载优先级

基于Spring Boot 2.x详细介绍了Spring Boot的配置文件的加载优先级。

1 总体优先级

Spring boot支持非常多的配置,常见的外部配置和内部配置的整体优先级(https://docs.spring.io/spring-boot/docs/2.3.10.RELEASE/reference/html/spring-boot-features.html#boot-features-external-config):

  1. 命令行参数,比如–server.port=8080。
  2. JVM系统属性,通过System.getProperties()方法获取。
  3. 系统环境属性,通过System.getenv()方法获取。
  4. jar包外部的application-{profile}.properties/yml配置文件,如果没有指明激活的profile,则默认为default。
  5. jar包内部的application-{profile}.properties/yml配置文件,如果没有指明激活的profile,则默认为default。
  6. jar包外部的application.properties/yml配置文件。
  7. jar包内部的application.properties/yml配置文件。
  8. 通过@Configuration注解类上的@PropertySource注解引入的配置文件。

3 jar外部配置优先级

jar包同级别目录下:

  1. jar包所在目录中的/config文件夹下的配置文件。
  2. jar包所在目录中的配置文件。

3 jar内部配置优先级

配置文件查找时首先查找指定profile的,然后再查找没有profile的。查找的目录优先级(https://docs.spring.io/spring-boot/docs/2.3.10.RELEASE/reference/html/spring-boot-features.html#boot-features-external-config-application-property-files):

  1. 项目根目录下的/config目录下的配置文件。
  2. 项目根目录下的配置文件。
  3. 项目类路径(resources)下的/config目录下的配置文件。
  4. 项目类路径(resources)下的配置文件。

注意点:

  1. 同一目录下,.properties文件优先于.yml文件加载。
  2. 可以使用spring.config.location属性替换默认查找位置,也可以使用spring.config.additional-location属性来添加额外的配置位置,将会首先查找指定的位置然后查找默认位置。
  3. 需要注意的是,项目根目录下的配置文件或者/config目录下的配置文件在打包的时候不会被打入jar包中,因此一般很少用到。

4 bootstrap和application的优先级

bootstrap配置文件由spring父上下文加载,并且比application配置文件优先加载(父上下文不会使用application配置文件),而application配置文件由子上下文加载。bootstrap加载的配置信息不能被application的相同配置覆盖。

但是注意,如果要使用配置文件中的变量,那么同名变量将使用application文件中的配置,比如如果两个配置文件都有server.post变量,那么Spring将使用application中配置的值。为什么?因为在Environment中,application配置文件的propertySource排在bootstrap配置文件的propertySource之前,Spring 在进行属性注入、获取时,将会顺序遍历所有的propertySource查找属性,如果找到了就直接返回。.peoperties文件比.yaml文件的属性查找优先级更高的原理一样。

在这里插入图片描述

相关文章:

  1. https://spring.io/
  2. Spring Framework 5.x 学习
  3. Spring MVC 5.x 学习
  4. Spring Framework 5.x 源码

如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值