SpringBoot + Maven 多环境打包实现方法

 更新时间:2025年12月16日 16:51:19   作者:zyyn_未来可期  
本文介绍如何在SpringBoot项目中实现不同环境的配置切换及Maven多环境打包的方法,包括配置文件的选择与加载机制,以及如何通过POM文件进行多环境打包,感兴趣的朋友跟随小编一起看看吧

各位家人,本次我们介绍一下SpringBoot + Maven 的项目在不同的环境下的配置,以及不同环境下的打包。

做为开发,大家在日常的工作当中肯定都有环境的切换操作,这些也都是我们开发的一些常规操作了,毕竟在开发,测试,生产的时候大概率用的环境都不一样(包括数据库,redis等等)。

🎪 一、多环境切换

多的不说,直接扔几个yml配置文件,想必大家都眼熟

这三个文件中:

  • application.yml 是启动服务时,Spring会自动加载的配置文件
  • application-dev.yml 代表的是开发环境时的配置文件
  • application-pro.yml 代表的是生产环境的配置文件

但是请大家注意:
后面这两个文件在SpringBoot服务启动时,Spring并不会自动加载他们,想让他们加载还需要我们在application.yml 中添加一些配置如下所示。

application.yml:

spring:
  profiles:
#    active: @activatedEnv@
    # 此时加载dev开发环境
    active: dev
    # 此时加载pro生产环境
#    active: pro

对应关系如下图所示:

在服务启动加载的时候,服务器就会加载application.yml文件,然后通过配置去调用application-dev.yml文件,选择开发环境。当然如此,当active:prod,那么服务在启动时,Spring就会调用application-prod.yml文件进入生产环境。

🎪 二、Maven 多环境打包

上面我们已经介绍了各个环境直接的切换,但是想要完成多环境的打包还需要再pom中添加对应的依赖

pom.xml:

<!--多环境打包-->
    <profiles>
        <!--开发-->
        <profile>
            <id>dev</id>
            <properties>
                <!-- 环境标识,需要与配置文件的名称相对应 -->
                <activatedEnv>dev</activatedEnv>
            </properties>
            <activation>
                <!-- 默认环境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!--生产-->
        <profile>
            <id>pro</id>
            <properties>
                <activatedEnv>pro</activatedEnv>
            </properties>
        </profile>
    </profiles>
    <!-- 构建项目需要的信息 -->
    <build>
        <!--最终 Jar 包的名字-->
        <finalName>Jesus-${activatedEnv}</finalName>
        <!--Maven的打包插件-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- 作为DOM对象的配置 -->
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- resource插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>test-resources</id>
                        <!--目标执行的阶段,具体值看Maven的生命周期列表;-->
                        <phase>compile</phase>
                        <!--一个plugin的execution的目标列表,也就是上面的id-->
                        <goals>
                            <goal>testResources</goal>
                        </goals>
                        <configuration>
                            <!-- 覆盖原有文件 -->
                            <overwrite>true</overwrite>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <!-- 待处理的资源定义 -->
                            <resources>
                                <resource>
                                    <!-- 指定resources插件处理哪个目录下的资源文件 -->
                                    <directory>src/main/resources/${activatedEnv}</directory>
                                    <filtering>false</filtering>
                                </resource>
                            </resources>
                        </configuration>
                        <!--这个plugin是否应用到该POM的孩子POM,默认true;-->
                        <inherited>false</inherited>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

大家可以根据需要去修改上面的配置信息。

然后在我们的 application.yml 配置动态的使用即可:active: @activatedEnv@

这里的 @activatedEnv@ ,使用的就是我们在pom.xml里设置的 <activatedEnv>

最后在Maven打包时,我们只需要指定参数就好了

// 开发
mvn clean package -P dev
// 生产
mvn clean package -P prod

🎪 三、扩展

如果你的项目要打很多很多的包,同时又在多个地方使用,每个地方环境都不一样,改怎么办呢? 这样一个个的搞岂不是要了老命。

这里只提供一个思路,有需要的家人可以看看,并不是最好的解决方案,不喜勿喷!

1、在你的项目中新建一个文件夹config,用来保存你的配置文件

2、修改pom文件,在里面添加你需要的环境配置,我这里是根据不同的城市来切换环境

3、同样的编写你需要的build

4、指定你配置文件的路径,让maven打包的时候去对应的地方拿对应的配置文件:

5、编写一大堆脚本文件,用于打包

6、再编写一个脚本,去运行这些脚本,并且把打好的jar包拿到指定地点

MvnBuildAll-EapStdAll-js-test.bat:

@echo off
chcp 936
:INPUT
echo  ===================命令列表=======================  
echo  命令编号: 1    语意:执行打包文件本机仓库安装 -install
echo  命令编号: 9    语意:退出控制台  -quit
echo  ===================命令列表=======================
echo 请输入你要选择的命令:  
set /p cmd= 
IF %cmd% == 1 GOTO INSTALL  
IF %cmd% == 9 GOTO END  
:INSTALL
echo  ===================mvnbulid-gcc.bat=======================
call D:
call cd D:\workspace\code\eap-std\eap-std-webapp\buildzjtest
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-gcc.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-gcc-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-baseservice.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-baseservice.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-baseservice-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-platform.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-platform.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-platform-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-manage.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-manage.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-manage-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-tcservice.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-tcservice.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-tcservice-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-scm.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-scm.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-scm-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-cas.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-cas.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-cas-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-userconsole.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-userconsole.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-userconsole-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-analysis.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-analysis.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-analysis-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-mqlis.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-mqlis.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-mqlis-js-test.war D:\workspace\maven_jar\zjtest
echo  ============================  next continue  ============================
echo  ===================mvnbulid-dep.bat=======================
call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-dep.bat
echo  ===================copy war to build-new-war =======================
call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-dep-js-test.war D:\workspace\maven_jar\zjtest
echo  ===================执行完毕=======================
:END
echo  ===================按任意键退出=======================
@pause 

最后你只需要运行这个bat文件等着就行了。

如果你们是用Jenkins 等自动化部署,请一定要忽略这古老的方式。切记!切记!!切记!!!

到此这篇关于SpringBoot + Maven 多环境打包实现方法的文章就介绍到这了,更多相关SpringBoot Maven 多环境打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • log4j2异步Logger(详解)

    log4j2异步Logger(详解)

    下面小编就为大家带来一篇log4j2异步Logger(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Springboot+Vue+axios实现文章收藏功能

    Springboot+Vue+axios实现文章收藏功能

    这篇文章主要为大家详细介绍了Springboot+Vue+axios实现文章收藏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • IDEA创建springboot + mybatis项目全过程(步骤详解)

    IDEA创建springboot + mybatis项目全过程(步骤详解)

    这篇文章主要介绍了IDEA创建springboot + mybatis项目全过程及步骤详解,本文通图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Springboot使用RabbitMQ实现关闭超时订单(示例详解)

    Springboot使用RabbitMQ实现关闭超时订单(示例详解)

    介绍了如何在Spring Boot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和绑定关系,以及编写监听方法,实现了订单数据的发送和延时消费,感兴趣的朋友一起看看吧
    2025-01-01
  • 浅谈MyBatisPlus注解@EnumValue避坑

    浅谈MyBatisPlus注解@EnumValue避坑

    本文介绍如何使用MyBatisPlus的注解@EnumValue声明枚举类,同时指出需要避开的几个常见坑点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • Java基础之多线程

    Java基础之多线程

    以下是我们Java基础多线程的一些知识点总结,看完以后会觉得多线程也可以这么简单,小编精心推荐,希望能对大家有所帮助
    2018-09-09
  • hibernate 配置数据库方言的实现方法

    hibernate 配置数据库方言的实现方法

    这篇文章主要介绍了hibernate 配置数据库方言的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 基于SpringBoot实现图片上传与显示

    基于SpringBoot实现图片上传与显示

    这篇文章主要为大家详细介绍了基于SpringBoot实现图片上传与显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Java 17 更新后的 strictfp 关键字

    Java 17 更新后的 strictfp 关键字

    strictfp 可能是最没有存在感的关键字了,很多人写了多年 Java 甚至都不知道它的存在,strictfp,字面意思就是严格的浮点型。这玩意儿居然还有个关键字,可见其地位还是很高的。下面文章小编就带大家详细介绍其关键字,需要的朋友可以参考一下
    2021-09-09
  • 一篇文章带你入门Springboot沙箱环境支付宝支付(附源码)

    一篇文章带你入门Springboot沙箱环境支付宝支付(附源码)

    蚂蚁沙箱环境 (Beta) 是协助开发者进行接口功能开发及主要功能联调的辅助环境。沙箱环境模拟了开放平台部分产品的主要功能和主要逻辑
    2021-06-06

最新评论