Spring Boot 配置文件加载顺序
关于SpringBoot属性源的问题,可以参考Spring Boot 启动时做了什么?,配置文件(properties和yml)只是作为部分属性源,也是最常见的,本文单列出来说明一下。
配置文件的加载类
ConfigFileApplicationListener类负责加载配置文件
配置文件目录
默认情况下,配置文件会从以下目录顺序去加载:
- file:./config/
- file:./
- classpath:/config/
- 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