03_spring配置优先级
文章目录
- 一、配置优先级从高到低排序
- 1. 命令行参数(--key=value)
- 2. Java系统属性(-D参数)
- 3. 操作系统环境变量
- 4. 外部配置文件(JAR包外部)
- 5. JAR包内部配置文件
- 6. Profile-specific配置
- 7. @PropertySource注解
- 8. 默认属性
 
- 二、特殊场景说明
- 三、最佳实践建议
 
Spring Boot的配置和变量加载遵循明确的优先级规则,以下是综合多个来源的详细解析:
一、配置优先级从高到低排序
1. 命令行参数(–key=value)
通过--key=value形式传递,直接覆盖其他配置(如java -jar app.jar --server.port=8081)。
2. Java系统属性(-D参数)
通过JVM参数设置(如java -Dserver.port=8081 -jar app.jar)。
3. 操作系统环境变量
通过系统变量设置(如export SERVER_PORT=8081)。
4. 外部配置文件(JAR包外部)
- 目录优先级:/config/(JAR包同级) > 项目根目录 >classpath:/config/>classpath:/。
- 文件类型优先级:.properties>.yml>.yaml。
5. JAR包内部配置文件
位于src/main/resources下的application.properties或application.yml。
6. Profile-specific配置
如application-{profile}.properties,需通过spring.profiles.active激活。
7. @PropertySource注解
显式加载的配置文件,优先级低于默认配置。
8. 默认属性
通过SpringApplication.setDefaultProperties()设置。
二、特殊场景说明
- 微服务项目:bootstrap.yml优先级高于application.yml,常用于Spring Cloud配置。
- 相同目录下的文件冲突:.properties会覆盖同名的.yml文件。
- 随机值属性:如random.*,优先级低于环境变量但高于默认配置。
三、最佳实践建议
- 动态调整:生产环境推荐使用命令行参数或环境变量覆盖静态配置。
- 版本兼容性:Spring Boot 3.x以上版本严格遵循优先级规则,低版本可能存在差异。
