Spring Boot 配置文件加载顺序

关于SpringBoot属性源的问题,可以参考Spring Boot 启动时做了什么?,配置文件(properties和yml)只是作为部分属性源,也是最常见的,本文单列出来说明一下。

配置文件的加载类

ConfigFileApplicationListener类负责加载配置文件

配置文件目录

默认情况下,配置文件会从以下目录顺序去加载:

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

如果需要修改配置目录,可以修改spring.config.location属性,该属性的默认值是: classpath:/,classpath:/config/,file:./,file:./config/。可以看到允许配置多个值,且是倒序加载的。

配置文件名称

默认的配置文件名是application,后缀可以是.properties/.yml/.yaml。可以通过修改spring.config.name属性来改变配置文件名,这个文件同样能配多个值,且是倒序加载的。

WARNING

注意,spring.config.location和spring.config.name都不能写在配置文件里,而是写在命令行参数或环境变量中,总之必须先让程序读到这两个参数然后才能找到配置文件。

存在同名的配置项怎么处理

先加载的配置项生效,注意不是先加载的配置文件生效。换句话说如果存在多个配置文件,会按顺序加载完毕,但同名配置项只有首次出现的位置生效。

结合上述就可以做一些很有意思的事情了,例如你在开发一个中间件,开发时使用了默认的application.properties,但中间件发布时希望能将部分配置开放给用户去定制。这时可以将application.properties打包在jar包内提供默认配置项,同时在jar包外新建一个system.properties用于覆盖默认配置。可以这样写:

java -jar xxx.jar --spring.config.location=classpath:/,file:./config --spring.config.name=application,system
Last Updated 2024/11/24 20:50:53