Spring Boot 配置文件的加载优先级
1. 前言
今天突发奇想,如果Spring Boot的配置文件同时存在application.properties
和application.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/
file:./config/*/
file:./
classpath:/config/
classpath:/
3. 误区
这里容易产生一个误区,文件之间的优先级是这样的。当application.properties
和application.yaml
进行优先级加载时,它们都会加载,并不是application.properties
加载了application.yaml
就不加载了,而是它们的内容根据优先级的高低进行合并。
同样地当根据DEFAULT_SEARCH_LOCATIONS
路径进行优先级的时候它们也是同样的机制进行合并的。这一点我们一定要明白。
优先级指的是,配置文件都会加载,相同属性根据优先级高低进行合并。
4. 总结
Spring Boot 配置文件加载机制是一个很重要的考察点,在日常的配置扩展、多环境、运维部署都非常重要,也是面试经常问的知识点,需要学习了解。
关注下方公众号获取更多小胖哥的原创编程干货
往期推荐
程序员接私活完整攻略+赠开源管理系统
记一次由Redis分布式锁造成的重大事故,避免以后踩坑!
三种 MySQL 大表优化方案
通过这个故事理解啥是 NIO
重磅!GitHub 推出容器镜像仓库服务!
Upwork 发布最赚钱的编程语言 Top 15
Spring Boot 配置文件的加载优先级相关推荐
- Spring boot外部配置加载顺序
外部配置加载顺序 Spring boot 可以从以下位置加载配置 优先级从高到低 高优先级的配置,覆盖低优先级的配置 所有的配置,会形成互补配置 官网,给出了17个位置 这里,只介绍常用的11个位置 ...
- spring boot 会默认加载DataSourceAutoConfiguration这个类
spring boot 会默认加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个类, 而DataSo ...
- Spring Boot 全局懒加载
文章目录 Spring Boot 全局懒加载 1.简介 2.排除 Bean 3.Spring Boot 全局懒加载的利弊 Spring Boot 全局懒加载 1.简介 Spring Boot 在版本 ...
- Spring Boot配置文件的位置和优先级
目录 1.配置文件位置 2.Spring Boot配置文件 1.配置文件位置 1.file:./config/(项目路径下的config文件夹配置文件优先级最高) 2.file:/(项目路径下的配置文 ...
- Spring Boot @PropertySource注解加载指定配置文件(五)
我们可以通过@ConfigurationProperties和@Value两个注解获取主配置文件application.properties 或 apllication.yml中的配置信息,但是如果我 ...
- Spring Boot不允许加载iframe问题解决
2019独角兽企业重金招聘Python工程师标准>>> 在spring boot项目中出现不能加载iframe 页面空白,或者ie显示不允许加载页面 报一个"Refused ...
- Spring Boot程序无法加载主类解决方法
平时在打包war包程序后,经当再次右击程序"Run As --> Spring Boot App"时,控制台有时候会出现"应用程序无法加载主类"的报错,解 ...
- Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引言: 在SpringBoot中需要使用mvnw来做相关操作,但是却有时候会报出达不到MavenWr ...
- 京东一面:Spring Boot 如何热加载jar实现动态插件?
一.背景 动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也具有非常好的 开放性 除了自己的研发人员可以开发功能之外, ...
最新文章
- freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)
- 干货 | 一文总结机器学习类面试问题与思路
- Google 在印度建立 AI 实验室,致力于农业、医疗、教育
- opencv Mat类
- C# Random循环生成随机数重复问题解决方案
- u大侠pe系统桌面计算机,替换WinPE桌面背景的详细教程
- Typescript实现单例之父类调用子类
- ocr oracle,Oracle RAC备份和恢复OCR-Oracle
- 怎样用javascript给控件赋值,使在服务器端得到此控件的值?或怎样将前台的(或js)中的值传递到后台
- (二)生成深度伪造的方法
- 速成pytorch学习——5天nn.functional 和 nn.Module
- [摘]研究方法 - 实证研究
- Delphi的日期时间格式
- 只读挂载磁盘linux,linux挂载磁盘就变只读怎么解决
- ffmpeg examples -- demuxing_decoding
- 用C++语言写游戏——打怪小游戏
- 2020-06-07
- [转]QNX系统-基于高通骁龙SA8155平台,中科创达发布智能驾驶舱3.0解决方案
- Mysql 备份工具XtraBackup全量备份
- Win10改用microsoft账户登录发生了错误怎么解决?
热门文章
- linux centos7 重启服务器报错 Run 'systemctl daemon-reload' to reload units
- clion 远程调试配置失败 Failed to reload 错误
- golang beego 配置
- python3 asyncio 协程模块
- linux ubuntu 获取仓库源码并构建
- sqlite3.OperationalError: database is locked
- window cmd 端口查进程
- Windows下安装Memcached
- malloc()/free()的实现
- php 复制文件夹并压缩到最小_php在线压缩并下载压缩文件的方法