楼层: 首页/ 软件技术/ Spring Boot 3.5/ 配置管理:application.yml 与多环境
7

配置管理:application.yml 与多环境

Externalized Configuration

Spring Boot 配置外置:代码里不写死参数,全部放到配置文件。开发、测试、生产各一套 profile,启动时指定激活哪个。

文件用途
application.yml公共配置,所有环境共享。
application-dev.yml开发环境,本地数据库、DEBUG 日志。
application-prod.yml生产环境,线上数据库、INFO 日志。
application-test.yml测试环境,测试库。

激活 profile:三种方式

# 方式一:application.yml 里写死(开发用) spring: profiles: active: dev # 方式二:启动命令行参数(生产推荐) java -jar app.jar --spring.profiles.active=prod # 方式三:环境变量 export SPRING_PROFILES_ACTIVE=prod

外部化配置优先级(高到低)

同一个配置项在多个地方出现时,Spring Boot 按下面的优先级选。排在上面的会覆盖下面的。

顺序来源例子
1命令行参数java -jar app.jar --server.port=9090
2操作系统环境变量export SERVER_PORT=9090
3application-{profile}.yml(打包外)./config/application-prod.yml
4application-{profile}.yml(打包内)jar 里的 prod 配置
5application.yml(打包外)./config/application.yml
6application.yml(打包内)jar 里的默认配置
7代码里的默认值@Value 的冒号默认值
配置不生效?按优先级排一下

Spring Boot 配置优先级从高到低:命令行参数 > 环境变量 > application-{profile}.yml > application.yml > 默认值。你在 yml 里改了端口还是不生效,先检查是不是命令行参数或环境变量把它盖了。

本章面试题 · 第 7 章(配置管理)

1.(高频题)Spring Boot 的配置加载优先级,从高到低排一下。

查看答案

答案:命令行参数 > JNDI > 环境变量 > application-{profile}.yml > application.yml > @PropertySource > 默认值。解析:记住"命令行最霸道、环境变量其次、profile 配置盖默认配置"。改了不生效先往上找。

2.(理解题)@Value 和 @ConfigurationProperties 怎么选?

查看答案

答案:零散几个值用 @Value;一组相关配置(如数据库连接池参数、第三方 SDK 配置)用 @ConfigurationProperties 绑成一个对象,类型安全、可校验。解析:Boot 官方推荐后者,尤其配置项多的时候。