在实际项目开发中,我们通常需要面对多个运行环境:
- 开发环境(dev):本地调试,连接测试数据库,开启详细日志;
- 测试环境(test):QA 团队验证功能,模拟生产数据;
- 生产环境(prod):线上服务,高安全、高性能、低日志级别。
如果每次切换环境都要手动修改 application.yml 中的数据库地址、端口、密钥等信息,不仅效率低下,还极易出错。
✅ Spring Boot 提供了强大的多环境配置机制 —— Profile,让我们一套代码,多套配置,灵活切换。
1. 创建多环境配置文件
Spring Boot 约定:
所有以
application-{profile}.yml(或.properties)命名的文件,都是特定环境的配置文件。
我们在 src/main/resources/ 目录下创建以下文件:
src/main/resources/ ├── application.yml # 主配置文件(用于激活指定环境) ├── application-dev.yml # 开发环境 └── application-prod.yml # 生产环境
⚠️ 注意:你原文中写的是
application-pro.yml,但行业通用命名是prod(production 的缩写),建议统一使用prod。
2. 编写环境专属配置
✅ application-dev.yml(开发环境)
server: port: 8001 logging: level: com.example: debug url: orderUrl: http://localhost:9001 userUrl: http://localhost:9002
✅ application-prod.yml(生产环境)
server: port: 8002 logging: level: com.example: warn url: orderUrl: https://order.api.prod.example.com userUrl: https://user.api.prod.example.com
🔍 可见:不同环境可独立配置端口、日志级别、服务地址、数据库连接等。
3. 在主配置文件中激活指定环境
编辑 application.yml,指定当前激活的 Profile:
spring: profiles: active: dev # 当前使用开发环境配置
📌 启动时,Spring Boot 会:
- 加载
application.yml(公共配置 + 激活 profile);- 自动加载
application-dev.yml;- 合并配置,同名属性以 profile 配置为准。
4. 部署时如何切换到生产环境?
方式一:修改 application.yml(适合小型项目)
将 active: dev 改为:
spring: profiles: active: prod
方式二:启动时通过命令行指定(推荐!无需改代码)
# 打包后启动 java -jar myapp.jar --spring.profiles.active=prod # 或使用环境变量 export SPRING_PROFILES_ACTIVE=prod java -jar myapp.jar
✅ 优势:同一份 JAR 包,可在不同服务器上通过参数切换环境,真正实现“一次打包,到处运行”。
5. 验证多环境生效
步骤 1:设置 active: dev,启动项目
访问 http://localhost:8001/health
→ 应成功,因为开发端口是 8001。
步骤 2:改为 active: prod,重启
访问 http://localhost:8002/health
→ 端口变为 8002,说明生产配置已生效。
💡 你也可以在 Controller 中打印当前激活的 Profile:
@Value("${spring.profiles.active:unknown}") private String activeProfile; @GetMapping("/profile") public String getActiveProfile() { return "当前环境:" + activeProfile; }
6. 最佳实践建议
| 建议 | 说明 |
✅ 公共配置放 application.yml |
如 spring.application.name、全局日志格式 |
| ✅ 敏感信息不提交到 Git | 生产密码、密钥应通过环境变量或配置中心注入 |
| ✅ 使用标准命名 | dev / test / staging / prod |
| ✅ CI/CD 中动态指定 Profile | Jenkins、GitLab CI 等可通过参数控制部署环境 |
7. 总结
通过本节课,你已掌握 Spring Boot 多环境配置的核心能力:
- ✅ 使用
application-{profile}.yml分离不同环境配置; - ✅ 通过
spring.profiles.active激活指定环境; - ✅ 支持命令行动态切换,无需重新编译;
- ✅ 实现“开发一套代码,部署多套环境”的工程目标。
🎯 记住:环境隔离是专业开发的基本素养,而 Profile 是 Spring Boot 给我们的最佳礼物。