我是靠谱客的博主 甜甜保温杯,最近开发中收集的这篇文章主要介绍Spring Boot 配置文件的加载优先级总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

IntelliJ IDEA的数据库管理工具实在太方便了

本周末华为广州线下微服务交流会免费参加,速度报名了

你知道Java 8 的方法引用吗

最后

以上就是甜甜保温杯为你收集整理的Spring Boot 配置文件的加载优先级总结的全部内容,希望文章能够帮你解决Spring Boot 配置文件的加载优先级总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部