spring boot多环境配置核心是环境选择与优先级控制:推荐yml单文件多文档(---分隔),也可用多properties文件;打包后通过命令行参数、环境变量或外部配置文件指定环境;读取配置优先用@configurationproperties封装结构化配置,@value适用于简单值,environment适合动态场景。

Spring Boot 多环境打包和属性读取,核心就两件事:一是让不同环境用不同的配置,二是确保这些配置能被正确加载、安全使用。关键不在文件多,而在“怎么选”和“谁优先”。
多环境配置的两种主流写法
推荐优先用 yml 单文件多文档,维护成本低;团队习惯或历史项目也可用 多 properties 文件。
-
yml 单文件方式(推荐):在
application.yml中用---分隔多个环境块,通过spring.profiles.active指定当前激活环境。
例如:spring:<br> profiles:<br> active: dev<br>server:<br> port: 8081<br>---<br>spring:<br> profiles: dev<br>database:<br> url: jdbc:h2:mem:devdb<br>---<br>spring:<br> profiles: prod<br>database:<br> url: jdbc:mysql://prod-db:3306/app
-
多文件方式(兼容性强):保留
application.properties作通用配置,再建application-dev.properties、application-prod.properties等。只要在主配置里写spring.profiles.active=prod,就会自动加载对应文件并覆盖同名属性。
打包时指定环境的三种可靠方式
打成 jar 后,不能改源码里的配置,得靠外部控制。这三种方式按优先级从高到低排列,后写的会覆盖前面的:
-
命令行参数(最高优先级):运行 jar 时加
--spring.profiles.active=prod,例如:java -jar myapp.jar --spring.profiles.active=prod -
系统环境变量:在服务器上设置
SPRING_PROFILES_ACTIVE=prod,Spring Boot 会自动识别(注意大小写和下划线规则) -
外部配置文件:把
application-prod.yml放到 jar 同目录,或放在config/子目录下,启动时自动加载(Spring Boot 默认支持的外部位置之一)
读取配置的三种常用方法及适用场景
别只图快用 @Value,复杂配置建议封装对象;动态查值或兜底逻辑适合 Environment。
-
@Value 注解:适合简单、零散的值,比如端口、开关标志。
支持默认值写法:@Value("${server.port:8080}"),避免启动失败 -
@ConfigurationProperties:适合结构化配置,如数据库连接、第三方服务地址等。
必须加@Component或@Configuration,字段要有 getter/setter;配合@Validated还能校验 -
Environment 对象:适合运行时动态判断、条件分支或 fallback 逻辑。
注入Environment后调用getProperty("xxx", String.class, "default"),灵活又安全
配置加载顺序与覆盖规则
Spring Boot 会按固定顺序加载配置,后面加载的同名属性会覆盖前面的。典型顺序是:
jar 包内 application.yml config/application.yml 这意味着你可以在本地开发用 yml,上线时用环境变量切换环境,无需重新打包。











