前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 配置文件的加载优先级总结

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

作者头像
码农小胖哥
发布2020-09-10 12:00:29
3.2K0
发布2020-09-10 12:00:29
举报
文章被收录于专栏:码农小胖哥的码农生涯

1. 前言

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

本文基于Spring Boot 2.3.3.RELEASE

2. 配置文件加载顺序

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

代码语言:javascript
复制
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 配置文件加载机制是一个很重要的考察点,在日常的配置扩展、多环境、运维部署都非常重要,也是面试经常问的知识点,需要学习了解。我是:码农小胖哥 关注我获取更多的原创编程干货。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 配置文件加载顺序
  • 3. 误区
  • 4. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档