多环境与 Profile
约 630 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Spring Boot › 配置详解 › 多环境与 Profile
同⼀份代码需要在开发、测试、生产等不同环境中使用不同的配置。Spring Boot 通过 Profile 机制实现环境隔离。
Profile 专用文件
命名规则:application-{profile}.yml,例如:
src/main/resources/
├── application.yml # 通用配置
├── application-dev.yml # 开发环境
├── application-test.yml # 测试环境
├── application-prod.yml # 生产环境启动时,主文件 application.yml 总是加载,Profile 专用文件会根据激活的 Profile 选择性加载,且同名属性优先使用 Profile 文件的值。
示例:
# application.yml(通用)
server:
port: 8080
spring:
datasource:
url: jdbc:h2:mem:testdb# application-prod.yml
server:
port: 80
spring:
datasource:
url: jdbc:postgresql://prod-host:5432/mydb
username: prod_user
password: ${DB_PASSWORD}激活 prod 后,端口变为 80,数据源指向 PostgreSQL。
激活 Profile
有四种常见方式:
命令行参数
java -jar app.jar --spring.profiles.active=prod环境变量
export SPRING_PROFILES_ACTIVE=prod
java -jar app.jarapplication.yml 中指定(默认值)
spring:
profiles:
active: dev构建时硬编码(不推荐)
在 pom.xml 中配置 Profile,或在 IDE 的 Run Configuration 中设置。生产环境推荐通过环境变量或命令行参数动态指定。
多文档 YAML
在一个 YAML 文件中用 --- 分隔,也能达到 Profile 效果:
# application.yml
server:
port: 8080
---
spring:
config:
activate:
on-profile: dev
server:
port: 8081
---
spring:
config:
activate:
on-profile: prod
server:
port: 80适合简单场景,文件少但可读性下降,复杂项目建议拆成独立文件。
本地开发配置的忽略
不要在版本控制中提交本地敏感配置。常见做法:
- 使用
application-local.yml(加入.gitignore)。 - 本地开发时激活 local Profile:
--spring.profiles.active=local。 - 项目提供一个
application-local.example.yml(不含敏感值)作为模板供其他开发者复制。
小结
- Profile 文件命名:
application-{profile}.yml,激活后覆盖主文件的同名属性。 - 激活方式:命令行参数、环境变量、
application.yml中指定。 - 多文档 YAML 用
---分隔 +spring.config.activate.on-profile在单个文件中实现 Profile。 - 本地配置(含密钥)应加入
.gitignore,通过application-local.yml管理。 - 易错:Profile 文件不是"替换"主文件,而是"叠加"——Profile 文件中不存在的属性仍会使用主文件的值。
spring.profiles.active与spring.profiles.include不同,include 会额外激活其他 Profile,active 则是设置当前激活集。 - 思考任务:为你的项目创建
application-dev.yml(H2 内存库 + 8081 端口)和application-prod.yml(PostgreSQL + 80 端口),分别用--spring.profiles.active=dev和--spring.profiles.active=prod验证加载结果。
上一节:配置基础
下一节:配置绑定
