Springboot配置优先级
一、项目内部
以下是 SpringBoot 属性源加载顺序。后面的会覆盖前面的值。由低到高,高优先级配置覆盖低优先级
默认属性(通过SpringApplication.setDefaultProperties指定的)
@PropertySource指定加载的配置(需要写在@Configuration类上才可生效)
配置文件(application.properties/yml等)
RandomValuePropertySource支持的random.*配置(如:@Value("${random.int}"))
Java 系统属性(System.getProperties())
JNDI 属性(来自java:comp/env)
ServletContext 初始化参数
ServletConfig 初始化参数
SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性中的 JSON)
命令行参数
测试属性。(@SpringBootTest进行测试时指定的属性)
测试类@TestPropertySource注解
Devtools 设置的全局属性。($HOME/.config/spring-boot)
结论:配置可以写到很多位置,常见的优先级顺序:
命令行> 配置文件> springapplication配置
二、项目外部
最终效果:优先级由高到低,前面覆盖后面
命令行 > 包外config直接子目录 > 包外config目录 > 包外根目录 > 包内目录
同级比较:
profile配置 > 默认配置
properties配置 > yaml配置
三、整体配置
规律:最外层的最优先。
● 命令行 > 所有
● 包外 > 包内
● config目录 > 根目录
● profile > application