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多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用SQL保留两位小数的实现方式

    使用SQL保留两位小数的实现方式

    SQL中保留两位小数有三种方法:1、使用ROUND()函数进行四舍五入;2、使用CONVERT()函数和3、CAST()函数进行强制类型转换,这两种方法会截断多余的位数,ROUND()函数会保留0位,而CONVERT()和CAST()会删除多余的0
    2024-11-11
  • Java stringBuilder的使用方法及实例解析

    Java stringBuilder的使用方法及实例解析

    这篇文章主要介绍了Java stringBuilder的使用方法及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 浅谈Spring Boot、MyBatis、MyBatis-Plus 依赖版本对应关系

    浅谈Spring Boot、MyBatis、MyBatis-Plus 依赖版本对应关系

    本文主要介绍了SpringBoot、MyBatis和MyBatis-Plus的依赖版本对应关系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Java数组索引异常产生及解决方案

    Java数组索引异常产生及解决方案

    这篇文章主要介绍了Java数组索引异常产生及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java花式解决'分割回文串 ii'问题详解

    Java花式解决'分割回文串 ii'问题详解

    最学习动态规划思想的路上,遇见了‘分割回文串问题’,如临大敌啊,题目听起来蛮简单,思考起来却也没那么容易,本文将为大家详细介绍几种解决分割回文串 ii问题的办法,需要的可以参考一下
    2021-12-12
  • Spring Boot与React集成的示例代码

    Spring Boot与React集成的示例代码

    这篇文章主要介绍了Spring Boot与React集成的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 重写hashCode()和equals()方法详细介绍

    重写hashCode()和equals()方法详细介绍

    这篇文章主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Springboot整合Rabbitmq之Confirm和Return机制

    Springboot整合Rabbitmq之Confirm和Return机制

    这篇文章主要介绍了Springboot整合Rabbitmq之Confirm和Return详解,本篇重点进行Confirm 机制和Return 机制的实现和说明,通过实例代码相结合给大家详细介绍,对Springboot整合Rabbitmq相关知识感兴趣的朋友一起看看吧
    2022-02-02
  • IDEA中打jar包的2种方式(Maven打jar包)

    IDEA中打jar包的2种方式(Maven打jar包)

    这篇文章主要给大家介绍了关于IDEA中打jar包的2种方式,分别是不使用Maven直接打Jar包与使用Maven打jar包的两种方法,需要的朋友可以参考下
    2021-05-05
  • SpringBoot监听事件和处理事件程序示例详解

    SpringBoot监听事件和处理事件程序示例详解

    这篇文章主要介绍了SpringBoot监听事件和处理事件程序示例,监听和处理事件是一种常用的模式,用于在应用程序的不同部分之间传递信息,Spring 的事件发布/订阅模型允许我们创建自定义事件,并在这些事件发生时由注册的监听器进行处理,需要的朋友可以参考下
    2022-06-06

最新评论