Spring Boot 配置文件加载优先级
Spring Boot按特定顺序加载配置文件,后加载的配置覆盖前加载的配置。
配置文件位置
按优先级从高到低:
| 优先级 | 位置 | 说明 |
|---|---|---|
| 1 | 当前目录/config/ | 最高优先级 |
| 2 | 当前目录/ | |
| 3 | 类路径/config/ | |
| 4 | 类路径/ | application.properties/yml |
properties
项目根目录/
├── config/
│ └── application.yml # 优先级最高
├── application.yml # 优先级次高
├── src/main/resources/
│ ├── config/
│ │ └── application.yml # 优先级第三
│ └── application.yml # 优先级最低
配置文件格式
YAML
# 同时存在时,properties优先于yml
application.properties > application.yml
# 支持格式
.properties
.yml
.yaml
相同位置同时存在.properties和.yml,properties优先级更高。
加载顺序详解
YAML
1. file:./config/application.yml (外置config目录)
2. file:./application.yml (外置根目录)
3. classpath:/config/application.yml (内置config目录)
4. classpath:/application.yml (内置根目录)
覆盖规则
Java
# 低优先级配置
server:
port: 8080
name: app1
# 高优先级配置(外置)
server:
port: 9090
# 最终生效:port=9090(覆盖),name=app1(保留)
高优先级配置覆盖同名属性,不同名属性保留低优先级配置值。
Profile配置文件
YAML
# 加载顺序
application.yml # 基础配置
application-dev.yml # Profile配置,覆盖基础配置
application.yml # 当前目录/config/ 最高优先级
Profile配置文件优先级高于基础配置文件,但位置优先级仍然生效。
自定义配置文件名
Java
// 通过环境变量指定
System.setProperty("spring.config.name", "myapp");
// 加载 myapp.yml 而非 application.yml
Java
# 通过配置指定
spring:
config:
name: myapp
自定义配置位置
text
// 方式一:命令行参数
java -jar app.jar --spring.config.location=file:/custom/config/
// 方式二:环境变量
export SPRING_CONFIG_LOCATION=file:/custom/config/
// 方式三:配置文件
spring:
config:
location: file:/custom/config/
指定spring.config.location会替换默认位置,不追加。
spring.config.additional-location
text
// 在默认位置之外添加配置位置
spring.config.additional-location=file:/external/config/
// 加载顺序:
// 1. additional-location(最高)
// 2. 默认位置(按原有顺序)
配置文件优先级总结
| 配置位置 | 优先级 |
|---|---|
| spring.config.location指定 | 最高 |
| spring.config.additional-location | 高于默认 |
| file:./config/ | 高 |
| file:./ | 中 |
| classpath:/config/ | 低 |
| classpath:/ | 最低 |
要点总结
- 配置文件按位置优先级加载,高优先级覆盖同名属性
- 同位置.properties优于.yml
- 外置配置(当前目录)高于内置配置(类路径)
- Profile配置覆盖基础配置
- spring.config.location替换默认位置
- spring.config.additional-location追加配置位置
📝 发现内容有误?点击此处直接编辑