Spring Boot 多环境配置Maven Profile vs 启动参数注入深入解析

 更新时间:2025年12月11日 08:49:24   作者:tlnshuju  
本文介绍了在Java项目开发和部署中使用多环境配置的方法,比较了两种主要方式:MavenProfile方式和启动参数方式,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

一、背景说明

在项目开发和部署过程中,我们通常会维护多套配置文件:

  • 开发环境(dev):打印调试日志、使用本地数据库;
  • 测试环境(test):连接测试库、关闭控制台输出;
  • 生产环境(prod):追求性能、关闭 debug、连接生产数据库。

Spring Boot 天生支持多环境配置,但不同团队在使用上有两种主要方式:

  • Maven Profile 方式(打包阶段固定环境)
  • Spring Profile 启动参数方式(运行时动态选择)

这两者目标一致但理念不同

  • Maven Profile 更偏向 构建时环境固化
  • Spring Profile 更偏向 运行时灵活切换

⚙️ 二、核心区别一览表

对比维度Maven Profile(构建时)启动参数注入(运行时)
配置切换时机打包阶段确定启动阶段动态指定
构建产物每个环境一个 jar一个通用 jar
命令方式mvn clean package -Pprodjava -jar app.jar --spring.profiles.active=prod
配置文件数量每个环境一个 jar 内部配置不同所有配置文件打包进一个 jar
修改环境成本高(需重新打包)低(重启命令即可)
CI/CD 兼容度一般极佳
本地开发体验稍繁琐方便(命令切换)
适用部署场景传统服务器、手动运维Docker、K8s、Jenkins 等现代环境
企业使用比例(经验值)约30%约70%(主流)

三、方案一:Maven Profile 多环境打包

1. 原理简介

Maven 的 <profiles> 标签允许在 打包阶段 注入不同属性值。
结合 Spring Boot 的占位符替换机制(@spring.profiles.active@),
可以让打出来的 jar 在内部就写死对应环境。

这种方式的核心理念是:

“一个环境,一个包” —— 打包即部署。

2. pom.xml 配置示例

<profiles>
  <profile>
  <id>dev</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <spring.profiles.active>dev</spring.profiles.active>
    </properties>
  </profile>
  <profile>
  <id>test</id>
    <properties>
    <spring.profiles.active>test</spring.profiles.active>
    </properties>
  </profile>
  <profile>
  <id>prod</id>
    <properties>
    <spring.profiles.active>prod</spring.profiles.active>
    </properties>
  </profile>
</profiles>

3. application.yml

spring:
profiles:
active: @spring.profiles.active@

打包时执行:

mvn clean package -Pprod

将生成的配置内容:

spring:
profiles:
active: prod

⚙️ 4. 打包命令

mvn clean package -Pdev
mvn clean package -Ptest
mvn clean package -Pprod

⚡ 四、方案二:启动参数注入(推荐)

1. 原理简介

Spring Boot 在运行时根据 spring.profiles.active 参数加载对应配置文件。
这种方式无需重新打包,只要调整命令即可切换环境。

“一个包,多环境复用”。

️ 2. 配置文件结构

src/main/resources/
├── application.yml
├── application-dev.yml
├── application-test.yml
└── application-prod.yml

3. 启动命令示例

java -jar app.jar --spring.profiles.active=dev
java -jar app.jar --spring.profiles.active=test
java -jar app.jar --spring.profiles.active=prod

4. 环境变量方式(生产推荐)

export SPRING_PROFILES_ACTIVE=prod
java -jar app.jar

Spring Boot 自动读取环境变量配置。

五、选择建议

场景推荐方案理由
开发环境启动参数注入切换快速
测试环境启动参数注入无需重打包
生产环境环境变量或 Maven Profile稳定可控
Docker/K8s 部署启动参数注入最佳实践

六、混合写法(兼容两者)

spring:
profiles:
active: @spring.profiles.active@

启动命令可覆盖:

java -jar app.jar --spring.profiles.active=prod

✅ 七、总结

Maven Profile 是“打包时选环境”,Spring Profile 是“运行时选环境”。在现代 DevOps 或容器化部署中,更推荐使用启动参数注入方式。

到此这篇关于java多线程的文章就介绍到这了,更多相关java多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java如何创建Annotation

    详解Java如何创建Annotation

    在本文中,我们将介绍注解的基础知识,包括注解是什么,它们如何在示例中使用,以及如何处理它们。下面和小编一起来学习吧
    2019-05-05
  • Java参数校验Validator与@AssertTrue深度解析

    Java参数校验Validator与@AssertTrue深度解析

    本文详细介绍了Java的Validator框架及其@AssertTrue注解的使用,包括环境准备、基础注解介绍、实战示例、@AssertTrue的深入解析、高级特性和最佳实践建议,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • MQ的消息模型及在工作上应用场景

    MQ的消息模型及在工作上应用场景

    这篇文章主要介绍了MQ的消息模型及在工作上应用场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 关于Controller 层返回值的公共包装类的问题

    关于Controller 层返回值的公共包装类的问题

    本文给大家介绍Controller 层返回值的公共包装类-避免每次都包装一次返回-InitializingBean增强,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • 基于Java编写统一日志工具类搞定双日志体系的智能打印

    基于Java编写统一日志工具类搞定双日志体系的智能打印

    这篇文章主要为大家详细介绍了如何基于Java编写一个统一日志工具类UnifiedLogger,一把搞定两套日志的智能过滤,文中的示例代码讲解详细,有需要的小伙伴可以参考下
    2026-05-05
  • java实现在原有日期时间上加几个月或几天

    java实现在原有日期时间上加几个月或几天

    这篇文章主要介绍了java实现在原有日期时间上加几个月或几天,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • SpringMVC实现Validation校验过程详解

    SpringMVC实现Validation校验过程详解

    这篇文章主要介绍了SpringMVC实现Validation校验过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java项目中添加外部jar包的两种方式(收藏版)

    Java项目中添加外部jar包的两种方式(收藏版)

    这篇文章主要介绍了java项目中添加外部jar包的两种方式,第二种方式是将外部jar包引入到本地maven仓库中,本文给大家讲解的非常详细,需要的朋友可以参考下
    2023-03-03
  • 详解Spring 参数验证@Validated和@Valid的区别

    详解Spring 参数验证@Validated和@Valid的区别

    这篇文章主要介绍了详解参数验证 @Validated 和 @Valid 的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Mybatis的介绍、基本使用、高级使用

    Mybatis的介绍、基本使用、高级使用

    这篇文章主要介绍了Mybatis的介绍、基本使用、高级使用,Mybatis是一款半自动的ORM持久层框架,具有较高的SQL灵活性,如何使用看这篇就够了,需要的朋友可以参考下
    2023-03-03

最新评论