问题描述
近日将Spring Boot搭建的项目通过公司统一部署平台部署到生产环境后,出现了部署时项目启动日志不存在的问题。
结果:项目启动失败。
自查过程
-
下载编译好的预发包到本地,内容如下图,经检查,包的内容完全正确。
-
接下来申请堡垒机登录权限,登录到容器中,内容如下图:
结果:发现容器中WAR包解压后的内容基本没有了,只剩下部署平台上配置覆盖的配置文件了。有可能是 WAR包解压 的时候出现了问题。
求助过程
-
向部署平台部门的同事求助后,回复内容如下:
-
看了下项目的
pom.xml
,内容如下:
果然!spring-boot-maven-plugin
插件的 excutable
配置没有设置为 false
!!!
结果:修改为false后,重新编译,构建镜像,部署,项目启动成功。问题成功解决!
问题深入分析
- spring-boot-maven-plugin插件的excutable配置是干啥用的?
即,如果将这个配置设置为 true
,打包出来的 jar/war 就是 可执行 的了,可以用如下方式执行:
- 为啥配置为
true
后解压WAR包的时候就会失败?
Spring Boot官网上面文档如是说:
完全可执行 的 jar/war 在文件前面嵌入了个 额外的脚本,这就使得有些命令会执行失败,比如 jar -xf
等。
查看统一部署平台在构建镜像时的日志,如下图,发现就使用了这个命令,所以WAR包就会解压失败!!!
总结
大家将Spring Boot项目打包部署,如果使用 jar -xf
等解压命令,一定要注意
springboot的maven插件 spring-boot-maven-plugin
的 executable
配置一定要设置为 false
!!!
不然会解压失败!