本文介绍 Spring Boot 2 配置实现方案。
目录
- 配置方式
- 注入方式
- 属性值优先级
- 配置文件格式
- 配置文件位置
配置方式
Spring Boot 允许使用的外部外配置方式包括:
-
properties
文件 -
YAML
文件 - 环境变量
- 命令行参数
注入方式
属性值可以使用注解 @Value
直接注入 bean
对象中,或通过 @ConfigurationProperties
注解绑定到类定义上。
属性值优先级
属性值按以下优先级顺序覆盖:
-
Devtools
激活时home
目录下全局设置属性 - 添加
@TestPropertySource
注解的测试 - 测试中的属性,可在
@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-{profile}.properties
及YAML
) - 打包
jar
文件内的应用属性(application-{profile}.properties
及YAML
) - 定义
@Configuration
类中使用@PropertySource
注解的属性 -
SpringApplication.setDefaultProperties
指定的默认属性
配置文件格式
Spring Boot 接受 properties
和 YAML
两种格式的配置文件,尽管创建 Spring Boot 工程默认生成的是 properties
格式配置文件,但是个人来讲更偏好于 YAML
格式配置文件,优点:
(1) 配置层级关系更清晰;
(2) 在同样配置下占用的字符数量小于或等于 properties
格式配置文件。
注意:YAML
配置文件后缀名为 .yml
。
配置文件位置
Spring Boot 会从以下位置加载配置文件。
- 当前目录下
/config
子目录 - 当前目录
- 类路径下
/config
包 - 类路径根目录
注意:
(1) 以上列表中较高位置定义的属性会覆盖在较低位置中定义的属性;
(2) 推荐将所有配置文件统一放在一个 config
子目录中。