Bootstrap

Java多环境打包指南

在这里插入图片描述

Java多环境打包指南

更加推荐第三种方式,方式一和方式二都只建议参考

一、普通打包方式

正常情况下会分为四个文件

image-20240522144150418

然后通过在 bootstrap.yml 中修改 spring.profiles.active 的方式来切换启动环境

image-20240522144305426

这种应该就是最简单的打包方式了,但是使用起来会比较麻烦。

因为如果你需要在 dev、test、uat、prd 四个环境打包的话,你需要上传四次代码,不断的去修改 spring.profiles.active ,这样子玩就太麻烦了。

ps:我指的在 Jenkins 上打包,你要是本地打包不需要上传代码的话,那就是需要打包四次

结论

也就是说,在这种方式下,发四个环境需要四次上传代码,四次打包。

二、通过 maven 的 profiles 进行打包

2.1、修改父工程 pom 文件

第一步:在 build 标签中添加

<!--不加这个pom文件内容无法读取到properties-->
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/*</include>
        </includes>
    </resource>
</resources>

第二步:在 build 标签下面添加

<profiles>
    <profile>
        <!--不同环境Profile的唯一id-->
        <id>dev</id>
        <properties>
            <!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
            <profiles.active>dev</profiles.active>
        </properties>
        <!-- 默认 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prd</id>
        <properties>
            <profiles.active>prd</profiles.active>
        </properties>
    </profile>
    <profile>
        <id>uat</id>
        <properties>
            <profiles.active>uat</profiles.active>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
        </properties>
    </profile>
</profiles>

注意,这里我开启的是 dev 为默认环境,你可以按需求修改你想要的默认环境

2.2、修改所有子工程的 bootstrap.yml 文件

第三步 修改 bootstrap.yml 文件

spring:
  profiles:
    active: @profiles.active@
    
# 这里原先为 active: dev

2.3、如何使用

做完上述工作后,项目整体进行 install。

完成后 maven 区域应该如图所示:

image-20240522145709399

会出现这些选项,然后你就可以勾选你想启动的环境来启动了。

注意如果不选择的话,是无法启动的

2.4、运维如何发版

这里主要是分为两种方式,mvn 打包时指定、启动时指定

2.4.1、mvn 打包指定

第一步:首先我们将 maven 区域的 profiles 置空

image-20240522150105827

第二步:然后我们通过命令打包

image-20240522150139403

mvn clean package -P prd

第三步:验证

enter image description here

我们打开打包好的 jar 包,可以看到虽然我们没勾选 profiles 但是打包后的结果这里也会显示为 prd。

结论

在这种方式下,发四个环境需要四次打包。

因为把指定环境放到了打包时由命令来指定,所以相对于普通打包方式,会少四次上传代码。

2.4.2、启动时指定

我们直接使用 2.4.1 章打出来的 jar 包进行测试。

这个时候直接本地命令启动

java -jar -Dfile.encoding=UTF-8 jar名称.jar

会发现是无法启动的,因为会连接到 prd 的 nacos 上去(我测试时有网络隔离,无法直接连接到生产的网络)

这个时候我们修改一下启动命令

java -jar -Dfile.encoding=UTF-8  jar名称.jar --spring.profiles.active=dev

再次启动就会发现以 dev 环境启动起来了

启动成功

结论

在这种方式下,发四个环境只需要一次打包。

因为把代码是同一份,启动由启动命令来指定了。

这两种方式任选其一就可以了,如果想要 prd 启动的话可以 mvn 打包为 prd,或者是指定参数为 prd,我更推荐命令指定的方式。

三、环境变量的方式

这种方式相对于上一种启动时指定来说,效果一样,但是更加简单,更加方便。

3.1、添加环境变量

enter image description here

环境变量名:SPRING_PROFILES_ACTIVE
环境变量值:dev

3.2、测试

注意:记得重启 IDEA 不然不会重新读取环境变量

到这里实际上就已经完成了,可以直接启动了。

测试图:

image-20240522152632964

可以看到,虽然我的文件中是指定为 uat 启动,但是环境变量设置为 dev 所以启动时就是 dev

3.3、自定义环境变量名

这个的写法在上面的基础上有一点点小的修改

image-20240522152730357

配置一个叫 PROFILES_ACTIVE 的环境变量

格式为:

${环境变量:如果读取不到的默认值}

所以上图所示的意思为,读取环境变量,如果读取不到则以 dev 环境启动

两种方式都可以,但是都需要记得修改完环境变量后,需要重启 IDEA

3.4、运维如何发版

运维日常发版打包就是正常的发版打包,无需额外设置。

但是首次运行时,需要在服务器上指定环境变量

vim /etc/profile
#添加配置
export SPRING_PROFILES_ACTIVE=prd
#然后保存文件

#保存完成之后,重新链接服务器,进行检测是否设置成功
echo $SPRING_PROFILES_ACTIVE

enter image description here

如图示,就配置完成了。

结论

在这种方式下,发四个环境只需要一次打包。

并且使用简单,无需修改任何代码,并且可以直接将 bootstrap.yml 中的 spring.profiles.active 配置为 dev 这样所有事情都可以让运维那边去弄,开发则完全不用管,因为如果你不指定的话就会默认 dev 启动了,本地实际上就不需要配置。

;