Spring Boot 配置优先级
Spring Boot 将配置外置,因此,你可以让同一个应用在不同的环境中正常工作。你可以使用 properties 文件, YAML 文件,环境变量,以及命令行参数将配置外置。属性值可以用 @Value
注解直接注入到 bean 中,用 Spring 的 Environment
抽象直接访问,或者通过 @ConfigurationProperties
绑定到结构化对象中。
Spring Boot 使用一种特殊的 PropertySource
优先级顺序,这种方式设计为可以合理的覆盖属性值。属性以下列顺序依次考察:
- 读取 home 目录下 devtools 的全局属性设置 (当 devtools 有效时,
~/.spring-boot-devtools.properties
) 。 - 单元测试中的
@TestPropertySource
注解。 - 单元测试中的
properties
属性。在 @SpringBootTest 以及测试应用特定片段的测试注解中有效。 - 命令行参数。
- 从
SPRING_APPLICATION_JSON
(内嵌于某个环境变量或系统属性中的JSON) 中来的属性。 - 初始化参数中的
ServletConfig
。 - 初始化参数中的
ServletContext
。 java:comp/env
中的 JNDI 属性。- Java 系统属性 (
System.getProperties()
)。 - 操作系统环境变量。
- 仅在
random.*
中的属性RandomValuePropertySource
。 - jar 包之外的 profile 应用属性 (
application-{profile}.properties
及对应的 YAML)。 - jar 包内的 profile 应用属性 (
application-{profile}.properties
及对应的 YAML)。 - jar 包外的应用属性 (
application.properties
及对应的 YAML)。 - jar 包内的应用属性 (
application.properties
及对应的 YAML)。 @Configuration
类的 @PropertySource 注解。- 默认属性(设置在
SpringApplication.setDefaultProperties
中)。