spring boot1.5.x 的配置文件加载优先级【关于spring.config.locatioin和spring.config.name】

网上不少文章介绍spring boot配置文件加载优先级,但是有的地方不全面,结合spring boot 1.5.x源码分析和实际使用情况,在此汇总一下:

  • 1、当系统启动参数中指定spring.config.location,加载配置文件时会在spring.config.location指定目录,结合默认路径        file:./config/,file:./,classpath:/config/,classpath:/,加载配置文件,优先级由高到低,文件名默认为application,扩展名properties,xml,yml,yaml(源码见PropertySourceLoader及子类),关键代码见下图

spring boot1.5.x 的配置文件加载优先级【关于spring.config.locatioin和spring.config.name】_第1张图片

  • 2、当系统启动参数中指定spring.config.name,则步骤1里面文件名不再使用默认的application,而使用spring.config.name指定的文件名,同样在步骤1的目录按优先级加载指定文件名的配置,关键代码见下图

spring boot1.5.x 的配置文件加载优先级【关于spring.config.locatioin和spring.config.name】_第2张图片

  • 3、只要上述加载的配置文件中包含spring.profiles.active,且对应的文件没有加载过,那下次循环中就会继续加载对应的配置文件,文件名为步骤2中用spring.config.name指定的文件名,若没指定则用默认文件名application,再加上-{spring.profiles.active},spring.profiles.active指定的配置文件优先级高于其他配置文件
  • 4、每个实现org.springframework.boot.env.PropertySourceLoader的loader,都需要指定对应支持的拓展名。
  • 5、若有多个loader对相同拓展名的配置文件处理,优先级高的loader加载,后续的loader处理时略过。
  • 6、读取配置时从propertySourceList中按顺序查找,先放入list中的source中读到了配置,就不往后面查找,因此配置的生效顺序为:
    • spring.profiles.active配置文件
    • 系统参数spring.config.location
    • file:./config/
    • file:./
    • classpath:/config/
    • classpath:/

参考:

https://blog.csdn.net/J080624/article/details/80508606

https://www.jianshu.com/p/07c48a8bb0f0

 

你可能感兴趣的:(java,spring,spring,boot,配置文件,优先级)