Spring Boot 多环境配置与 Profile 实战

简介: Spring Boot通过Profile实现多环境配置,支持dev、test、prod等环境的独立配置。通过application-{profile}.yml分离配置,结合spring.profiles.active动态激活,实现一套代码适配多套环境,提升部署效率与安全性。

在实际项目开发中,我们通常需要面对多个运行环境:

  • 开发环境(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 会:

  1. 加载 application.yml(公共配置 + 激活 profile);
  2. 自动加载 application-dev.yml
  3. 合并配置,同名属性以 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 给我们的最佳礼物


相关文章
|
26天前
|
监控 前端开发 Java
Spring Boot 统一异常处理与全局响应增强
本文介绍如何在Spring Boot中实现全局异常处理,通过`@RestControllerAdvice`和自定义`BusinessException`统一拦截异常,结合`JsonResult`标准化响应格式,避免信息泄露,提升前后端协作效率与系统健壮性。
|
10月前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
790 4
springboot-多环境配置文件
|
26天前
|
JSON 安全 fastjson
使用阿里巴巴 Fastjson 替代 Spring Boot 默认的 Jackson
本文介绍在 Spring Boot 项目中如何替换默认的 Jackson,集成阿里巴巴 Fastjson 作为 JSON 处理框架。内容涵盖 Fastjson 与 Jackson 的核心对比、依赖配置、自定义消息转换器、null 值统一处理及循环引用控制,并提供安全建议与最佳实践,助你高效、安全地使用 Fastjson。
|
26天前
|
JSON 前端开发 Java
Spring Boot 返回 JSON 数据及数据封装
本课讲解Spring Boot中JSON处理:通过@RestController返回JSON,利用内置Jackson实现对象、List、Map自动序列化,并自定义配置优雅处理null值,提升前后端交互体验。
|
druid Java 数据库连接
Spring Boot3整合MyBatis Plus
Spring Boot3整合MyBatis Plus
1659 1
|
26天前
|
安全 Java 数据库
自定义认证实现流程
本文介绍如何在Spring Security中实现自定义用户认证。首先创建自定义UserDetailsService,实现loadUserByUsername方法,从数据库加载用户信息与权限;然后在SecurityConfig中注册该服务,配置登录逻辑与权限规则。通过整合持久层,完成基于数据库的认证流程,重启项目后即可生效。
自定义认证实现流程
|
1月前
|
安全 网络架构
对比外部公网IP与局域网内部IP的差异性
综上所述,外部公网IP地址与局域网内部IP地址在功能、应用范围、安全性与管理方式上存在明显的差异性。公网IP地址为网络设备提供了在整个互联网中可识别的唯一身份,而内网IP仅在私有网络中有效,且安全性相对较高。理解这些差异能有助于更好地配合网络地址的规划、管理与安全策略的设计。
236 8
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
1438 10
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
972 2

热门文章

最新文章