1. 前言

今天突发奇想,如果Spring Boot的配置文件同时存在application.propertiesapplication.yaml,于是便测试了一波。结果测出来优先级的顺序为 properties>yaml。大部分情况下我们并不会这两种类型的配置混用,但是不免一些面试官会拿这个刁难你,所以要有个印象。但是Spring Boot配置文件位置的优先级还是经常用的,所以今天就总结一波。

本文基于Spring Boot 2.3.3.RELEASE

2. 配置文件加载顺序

Spring Boot中,配置文件监听器ConfigFileApplicationListener用来处理加载配置文件逻辑,关键的加载逻辑优先级是下面这段代码

private Set<String> getSearchLocations() {// CONFIG_ADDITIONAL_LOCATION_PROPERTY = "spring.config.additional-location"Set<String> locations = getSearchLocations(CONFIG_ADDITIONAL_LOCATION_PROPERTY);// CONFIG_LOCATION_PROPERTY = "spring.config.location"if (this.environment.containsProperty(CONFIG_LOCATION_PROPERTY)) {locations.addAll(getSearchLocations(CONFIG_LOCATION_PROPERTY));}else {locations.addAll(// DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/"asResolvedSet(ConfigFileApplicationListener.this.searchLocations, DEFAULT_SEARCH_LOCATIONS));}return locations;
}

在任何情况下配置项spring.config.additional-location下的配置文件都会被先加载,如果我们指定了Spring Boot的配置路径spring.config.location(通常我们会通过命令行指定这个参数),就会从这个指定路径加载配置文件;如果没有指定spring.config.location那么就会从下面路径从上到下进行优先加载:

  • file:./config/

./config/ 示意图
  • file:./config/*/

./config/*/ 示意图
  • file:./

./ 示意图
  • classpath:/config/

classpath:/config/ 示意图
  • classpath:/

classpath:/ 示意图

3. 误区

这里容易产生一个误区,文件之间的优先级是这样的。当application.propertiesapplication.yaml进行优先级加载时,它们都会加载,并不是application.properties加载了application.yaml就不加载了,而是它们的内容根据优先级的高低进行合并。

优先级合并

同样地当根据DEFAULT_SEARCH_LOCATIONS路径进行优先级的时候它们也是同样的机制进行合并的。这一点我们一定要明白。

优先级指的是,配置文件都会加载,相同属性根据优先级高低进行合并。

4. 总结

Spring Boot 配置文件加载机制是一个很重要的考察点,在日常的配置扩展、多环境、运维部署都非常重要,也是面试经常问的知识点,需要学习了解。

关注下方公众号获取更多小胖哥的原创编程干货

往期推荐

程序员接私活完整攻略+赠开源管理系统

记一次由Redis分布式锁造成的重大事故,避免以后踩坑!

三种 MySQL 大表优化方案

通过这个故事理解啥是 NIO

重磅!GitHub 推出容器镜像仓库服务!

Upwork 发布最赚钱的编程语言 Top 15

Spring Boot 配置文件的加载优先级相关推荐

  1. Spring boot外部配置加载顺序

    外部配置加载顺序 Spring boot 可以从以下位置加载配置 优先级从高到低 高优先级的配置,覆盖低优先级的配置 所有的配置,会形成互补配置 官网,给出了17个位置 这里,只介绍常用的11个位置 ...

  2. spring boot 会默认加载DataSourceAutoConfiguration这个类

    spring boot 会默认加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个类, 而DataSo ...

  3. Spring Boot 全局懒加载

    文章目录 Spring Boot 全局懒加载 1.简介 2.排除 Bean 3.Spring Boot 全局懒加载的利弊 Spring Boot 全局懒加载 1.简介 Spring Boot 在版本 ...

  4. Spring Boot配置文件的位置和优先级

    目录 1.配置文件位置 2.Spring Boot配置文件 1.配置文件位置 1.file:./config/(项目路径下的config文件夹配置文件优先级最高) 2.file:/(项目路径下的配置文 ...

  5. Spring Boot @PropertySource注解加载指定配置文件(五)

    我们可以通过@ConfigurationProperties和@Value两个注解获取主配置文件application.properties 或 apllication.yml中的配置信息,但是如果我 ...

  6. Spring Boot不允许加载iframe问题解决

    2019独角兽企业重金招聘Python工程师标准>>> 在spring boot项目中出现不能加载iframe 页面空白,或者ie显示不允许加载页面 报一个"Refused ...

  7. Spring Boot程序无法加载主类解决方法

    平时在打包war包程序后,经当再次右击程序"Run As --> Spring Boot App"时,控制台有时候会出现"应用程序无法加载主类"的报错,解 ...

  8. Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引言: 在SpringBoot中需要使用mvnw来做相关操作,但是却有时候会报出达不到MavenWr ...

  9. 京东一面:Spring Boot 如何热加载jar实现动态插件?

    一.背景 动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也具有非常好的 开放性 除了自己的研发人员可以开发功能之外, ...

最新文章

  1. freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)
  2. 干货 | 一文总结机器学习类面试问题与思路
  3. Google 在印度建立 AI 实验室,致力于农业、医疗、教育
  4. opencv Mat类
  5. C# Random循环生成随机数重复问题解决方案
  6. u大侠pe系统桌面计算机,替换WinPE桌面背景的详细教程
  7. Typescript实现单例之父类调用子类
  8. ocr oracle,Oracle RAC备份和恢复OCR-Oracle
  9. 怎样用javascript给控件赋值,使在服务器端得到此控件的值?或怎样将前台的(或js)中的值传递到后台
  10. (二)生成深度伪造的方法
  11. 速成pytorch学习——5天nn.functional 和 nn.Module
  12. [摘]研究方法 - 实证研究
  13. Delphi的日期时间格式
  14. 只读挂载磁盘linux,linux挂载磁盘就变只读怎么解决
  15. ffmpeg examples -- demuxing_decoding
  16. 用C++语言写游戏——打怪小游戏
  17. 2020-06-07
  18. [转]QNX系统-基于高通骁龙SA8155平台,中科创达发布智能驾驶舱3.0解决方案
  19. Mysql 备份工具XtraBackup全量备份
  20. Win10改用microsoft账户登录发生了错误怎么解决?

热门文章

  1. linux centos7 重启服务器报错 Run 'systemctl daemon-reload' to reload units
  2. clion 远程调试配置失败 Failed to reload 错误
  3. golang beego 配置
  4. python3 asyncio 协程模块
  5. linux ubuntu 获取仓库源码并构建
  6. sqlite3.OperationalError: database is locked
  7. window cmd 端口查进程
  8. Windows下安装Memcached
  9. malloc()/free()的实现
  10. php 复制文件夹并压缩到最小_php在线压缩并下载压缩文件的方法