Spring Boot 加载配置文件的优先级按以下顺序排列,高优先级的配置会覆盖低优先级的配置:
命令行参数:通过
--spring.config.location
或--spring.config.additional-location
指定的配置文件路径拥有最高的优先级。Java系统属性:通过
System.setProperty()
设置的属性。操作系统环境变量:所有以
SPRING_APPLICATION_JSON
形式存在的环境变量,以及以spring.*
开头的环境变量会被转换为配置属性。配置文件外部:
config/{name}-{profile}.properties
或config/{name}-{profile}.yml
{name}-{profile}.properties
或{name}-{profile}.yml
config/{name}.properties
或config/{name}.yml
{name}.properties
或{name}.yml
其中
{name}
默认为application
,{profile}
是激活的Spring Boot配置环境。配置文件内部(对于已打包的应用):
BOOT-INF/classes/config/{name}-{profile}.properties
或BOOT-INF/classes/config/{name}-{profile}.yml
BOOT-INF/classes/{name}-{profile}.properties
或BOOT-INF/classes/{name}-{profile}.yml
BOOT-INF/classes/config/{name}.properties
或BOOT-INF/classes/config/{name}.yml
BOOT-INF/classes/{name}.properties
或BOOT-INF/classes/{name}.yml
@Configuration
类上的@PropertySource
注解:这种方式加载的配置具有较低的优先级,但是可以直接指向具体的配置文件。默认配置:Spring Boot包含一些内建的默认配置,其优先级最低。
另外,在同一位置下,.properties
文件优先级高于 .yml
或 .yaml
文件,且带有具体环境标识(如开发、生产环境)的配置文件优先于通用配置文件。
综上所述,Spring Boot 加载配置时会综合考虑配置文件的位置、名称及格式,并遵循上述优先级顺序。如果同一个配置项在不同优先级的配置文件中都存在,则采用优先级较高的配置文件中的值。