Spring Boot 指定外部配置文件主要有以下几种方式:
一、默认扫描位置(不需要额外指定)
Spring Boot 启动时会自动扫描以下位置(JAR 包所在目录):
./config/子目录/
./config/
./ ← JAR 包同级目录
所以最简单的方式就是把配置文件直接放在 JAR 包旁边:
/app/
├── myapp.jar
├── application.yml ← 自动加载
└── config/
└── application.yml ← 自动加载,优先级更高
二、spring.config.location 指定完整路径
用这个参数后,Spring Boot 只加载你指定的位置,默认位置全部失效。
# 指定文件
java -jar app.jar --spring.config.location=file:/etc/myapp/application.yml
# 指定目录(注意结尾的 /)
java -jar app.jar --spring.config.location=file:/etc/myapp/
# 指定多个位置,逗号分隔,后面的优先级更高
java -jar app.jar --spring.config.location=classpath:/,file:/etc/myapp/
三、spring.config.additional-location 追加位置(推荐)
在默认扫描位置的基础上额外追加,不会覆盖默认位置,更安全。
java -jar app.jar --spring.config.additional-location=file:/etc/myapp/
追加的位置优先级高于默认位置。
四、spring.config.name 指定文件名
默认文件名是 application,可以改成别的:
java -jar app.jar --spring.config.name=myconfig
这样 Spring Boot 会去找 myconfig.yml 或 myconfig.properties,而不是 application.yml。
也可以同时加载多个名称:
java -jar app.jar --spring.config.name=application,myconfig
五、环境变量方式
上述参数也可以通过环境变量设置,适合容器化部署:
export SPRING_CONFIG_LOCATION=file:/etc/myapp/
export SPRING_CONFIG_ADDITIONAL_LOCATION=file:/etc/myapp/
export SPRING_CONFIG_NAME=myconfig
java -jar app.jar
六、实际部署常见写法
java -jar app.jar \
--spring.config.additional-location=file:/etc/myapp/ \
--spring.profiles.active=prod
Docker 部署:
COPY application-prod.yml /etc/myapp/
CMD ["java", "-jar", "app.jar", "--spring.config.additional-location=file:/etc/myapp/"]
K8s ConfigMap 挂载:
volumeMounts:
- name: config
mountPath: /etc/myapp
总结建议
| 场景 | 推荐方式 |
|---|---|
| 简单覆盖几个属性 | JAR 同级放 application.yml |
| 需要指定外部目录 | spring.config.additional-location(追加,不影响默认) |
| 完全自定义配置路径 | spring.config.location(替换默认) |
| 容器/K8s 环境 | 环境变量 + 挂载目录 |
一般推荐用 additional-location 而不是 location,这样 JAR 内部的默认配置仍然作为兜底生效,外部文件只覆盖需要变更的属性。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论