Spring Boot 项目打包完美实践
Spring Boot 打包远程执行代码
admin 发布于:2023-02-19 13:28:37
阅读:loading
前文中有两篇《Spring Boot 项目assembly打包实践》和《Spring Boot 项目打包静态资源分离实践》的文章来实践项目打包,本篇文章主要是来集二者所长,汇总实践出来一版本更加易于打包部署的实现,如果对打包部署缺乏较多的了解不妨先关注一下前面的两篇文章,本文则是回顾一下两种方式的优缺点,在此基础之上再整合出一版较为科学的实践结果,如前面两篇文章的优缺点如下。
1.1 Spring Boot 项目assembly打包实践
优点
(1)使用了强大的assembly插件,使得打包后的文件夹比较独立统一,也可利用插件将打包后的文件夹压缩等;
(2)打包按文件夹归类不同的文件夹(bin/conf/logs/runtime/lib),提供了简单的启停脚本;
(3)打包后的jar文件夹按类型归类,区分哪些是第三方开源的jar,哪些是本地jar,哪些是项目内部不同模块的jar(区分如此清楚至少有两个好处:1.很多时候可降低部署维护jar的成本,如果仅修改了项目内部的代码只需要部署项目内部的jar即可;2.可以通过Java -cp命令来指定不同jar中class文件加载的优先级,若需要修改一些第三方jar中的源码时,可以通过在项目内或本地修改jar的形式,通过优先级的加载来实现不修改开源的jar文件);
(4)提供启停命令的兼容细节,如脚本中设置了gc.log的文件夹和java.io.temp文件夹的设置,我们可以提前生成好需要的文件夹;
(5)支持按环境打包,默认为dev,另有test和prod环境,日志文件等其它配置文件均支持;
缺点
(1)未将静态资源和配置文件从jar中剥离,jar中还包含着有较多的静态资源文件,导致个别jar文件教导;
(2)无法做到修改资源文件后的适时生效;
优点
(1)将配置文件和资源文件从jar中剥离,使得jar中文件类型相对独立;
(2)配置文件和资源文件独立存放,资源文件的修改支持适时生效(已验证的范围为:静态资源文件和thymeleaf模板文件,未验证Excel和Freemarker等模板文件);
(3)运行脚本略简单,使用Java -jar运行;
缺点
(1)打包的结果显得有些半成品了,最终并未将所需的文件和文件夹归置在一个独立的文件夹中,除了包含打包后的文件夹(conf/lib/jar)还包含其它的文件夹;
(2)以熟悉掌握为主,不够专业和细致,距离企业级实践来讲并非完美;
打包命令可区分不同的环境,参考如下:
开发环境:clean compile package -Dmaven.test.skip=true -f pom.xml
测试环境:clean compile package -Ptest -Dmaven.test.skip=true -f pom.xml
生产环境:clean compile package -Pprod -Dmaven.test.skip=true -f pom.xml
【运行说明】
(1)conf目录为静态资源目录和配置文件目录,其中statics为静态资源目录,templates为thymeleaf模板路径,其它路径为classes中的配置文件;
(2)修改statics路径下的readme.txt文件,验证更新生效;
(3)在statics路径下增加lhk.jpg文件,验证增加文件生效;
(4)在templates目录下的usage目录的simple.html更新,验证修改模板文件生效(该文件内部有包含thymeleaf标签);
(5)本例验证项目源码可见:源码下载.zip;
(6)本例的实践是基于示例代码的“PackageAssembly”和“PackageJarResources”的实践总结而来;
(7)对于Java -jar的启动命令,我还是喜欢使用Java -cp命令,参考启动脚本为“java -Xmx256m -Xms256m -Xmn256m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log -Djava.io.tmpdir=../runtime -Dfile.encoding=utf-8 -Duser.timezone=GMT+8 -cp ../conf;../lib-local/*;../lib-project/*;../lib-jar/* cn.chendd.Bootstrap”,目前启动后的访问都还正常,更多的实践有待后续的实践检验了;
点赞