文章目录
Java多环境打包指南
更加推荐第三种方式,方式一和方式二都只建议参考
一、普通打包方式
正常情况下会分为四个文件
然后通过在 bootstrap.yml 中修改 spring.profiles.active
的方式来切换启动环境
这种应该就是最简单的打包方式了,但是使用起来会比较麻烦。
因为如果你需要在 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 区域应该如图所示:
会出现这些选项,然后你就可以勾选你想启动的环境来启动了。
注意如果不选择的话,是无法启动的
2.4、运维如何发版
这里主要是分为两种方式,mvn 打包时指定、启动时指定
2.4.1、mvn 打包指定
第一步:首先我们将 maven 区域的 profiles 置空
第二步:然后我们通过命令打包
mvn clean package -P prd
第三步:验证
我们打开打包好的 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、添加环境变量
环境变量名:SPRING_PROFILES_ACTIVE
环境变量值:dev
3.2、测试
注意:记得重启 IDEA 不然不会重新读取环境变量
到这里实际上就已经完成了,可以直接启动了。
测试图:
可以看到,虽然我的文件中是指定为 uat 启动,但是环境变量设置为 dev 所以启动时就是 dev
3.3、自定义环境变量名
这个的写法在上面的基础上有一点点小的修改
配置一个叫 PROFILES_ACTIVE
的环境变量
格式为:
${环境变量:如果读取不到的默认值}
所以上图所示的意思为,读取环境变量,如果读取不到则以 dev 环境启动
两种方式都可以,但是都需要记得修改完环境变量后,需要重启 IDEA
3.4、运维如何发版
运维日常发版打包就是正常的发版打包,无需额外设置。
但是首次运行时,需要在服务器上指定环境变量
vim /etc/profile
#添加配置
export SPRING_PROFILES_ACTIVE=prd
#然后保存文件
#保存完成之后,重新链接服务器,进行检测是否设置成功
echo $SPRING_PROFILES_ACTIVE
如图示,就配置完成了。
结论
在这种方式下,发四个环境只需要一次打包。
并且使用简单,无需修改任何代码,并且可以直接将 bootstrap.yml
中的 spring.profiles.active
配置为 dev 这样所有事情都可以让运维那边去弄,开发则完全不用管,因为如果你不指定的话就会默认 dev 启动了,本地实际上就不需要配置。