前因
由于我司项目采用的是基于springboot开发的项目,所以每一个模块都是打成jar包去进行全量更新部署的,如果是在内网的话还好,但是我们是买的阿里云的服务器,部署在公网上的,在网络带宽不稳定的情况下,一个小小的改动就需要去上传发布一个一百多兆的jar包文件,显得十分臃肿。
我们之前使用Tomcat在部署Web工程的时候,可以进行增量更新,就是改动哪一个文件,就把相应的class文件更新上去,重启Tomcat即可。调研发现SpringBoot也是可以采用增量更新,给项目做瘦身处理的。之所以SpringBoot编译出来的Jar包很大,是因为里面依赖了很多外部依赖库(jar包)占用了绝大多数的空间,如下图:
可以发现,我们依赖的这些jar都是固定不变的,所以就没有必要频繁的去全量打包上传了,将这些不变的jar包抽取出来,每次只上传更新变化的,这样就能够减少我们上传更新jar文件大小了。这和模板模式很相似,只关注改动的信息,把不变的信息抽取出来。
具体操作
第一步:将不变的jar包提取出来上传到服务器
正常打包的pom.xml文件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.App</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugins>
<build>
打过包,找到对应的jar文件,解压文件,将lib包中的文件全部上传至服务器
上传至服务器的某个文件夹下
修改pom.xml文件配置文件,使我们编译出来的jar包不含有lib包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.App</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugins>
<build>
配置完成后,再次执行编译打包,所以生成的jar包体积变小,如下图所示:
所以我们再次编译上传时,就只用把我们自己的jar包上传重新部署即可
修改启动脚本命令
#瘦身后的脚本命令
java -Xms128m -Xmx512m -Dloader.path=/a/b/c/lib -jar /a/b/c/xxx-service.jar &
#原先的启动脚本命令
#java -Xms128m -Xmx512m -jar exam-service.jar &