由于现在绝大多数服务都采用spring boot,且在打包时一般选择全量包的形式,因此在服务依赖比较多的情况下,更新/添加其中的一个文件时,会造成很大的麻烦,比如一个服务打完包后,jar文件的体积可能在200M左右,因此在网络条件不好的情况下,频繁更新服务包还是比较麻烦的事情,因此适时进行增量更新,是比较好的方法,也是在应对网络条件不好时的最好选择。

在windows下增量更新可以参考文章。 

javascript:void(0)

文章中需要注意的是,在将增量包装入压缩软件后,压缩方式要改成 存储

Linux下要实现增量更新相对麻烦一些,因此要使用到jar命令,对,就是jar命令,不是java命令。

jar命令也是jdk提供的一个命令行工具。

这里我们以Eureka-Server为例,上传eureka-server.jar到linux服务器,并启动!

Java增量更新 jar包增量更新_java

 可以看到启动端口时8081。

如果我们需要修改启动端口,可以通过命令行(-D)的形式,也可以更新application.yml文件

这里我们使用第二种方式,首先修改application.yml。

server:
  port: 9999
  context-path: /

spring:
  application:
    name: Eureka-Server

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${server.port}

这里我们把端口修改为9999。

此时我们重新创建一个路径,并将原来的eureka-server.jar和新的application.yml放到创建好的路径中去。

Java增量更新 jar包增量更新_java_02

 使用命令解压jar包

jar -xvf eureka-server.jar

结果如下

Java增量更新 jar包增量更新_java_03

 此时将新的application.yml替换到 BOOT-INF/classes/ 下

Java增量更新 jar包增量更新_java_04

 此时路径下内容

Java增量更新 jar包增量更新_Java增量更新_05

 接下来执行打包命令

jar -cvf0M eureka-server-new.jar  . (重新压缩,-0是主要的)

这个命令将打出一个eureka-server-new.jar

此时启动eureka-server-new.jar。

java -jar eureka-server-new.jar

Java增量更新 jar包增量更新_spring boot_06

 可以看到新打好的jar包已经在新端口上启动。

此时看看我们的路径下有什么

Java增量更新 jar包增量更新_Java增量更新_07

 发现 eureka-server-new.jar的大小比eureka-server.jar大不少。

我们再次新建一个路径,并将eureka-server-new.jar移动到新路径下,然后使用上面的命令解压eureka-server-new.jar看看里面有什么

Java增量更新 jar包增量更新_jar_08

 我们发现eureka-server.jar在eureka-server-new.jar中,因此eureka-server-new.jar包体积增长了不少。

那么我们重新回到刚才的路径,并且删除eureka-server-new.jar。

Java增量更新 jar包增量更新_java_09

此时执行命令

jar -cvf0M eureka-server.jar  .

 此时路径下文件

Java增量更新 jar包增量更新_spring boot_10

我们发现新打的eureka-server.jar与原始eureka-server.jar在体积上差异不大

然后启动eureka-server.jar

Java增量更新 jar包增量更新_java_11

 发现端口已经更新为9999

jar命令用法

-c 创建新的归档文件
 -t 列出归档目录和文件
 -x 解压缩已归档的指定(或所有)文件
 -u 更新现有的归档文件
 -v 在标准输出中生成详细输出 / 提供更详细输出信息
 -f 指定归档文件名 / 为压缩包指定名字
 -m 包含指定清单文件中的清单信息
 -e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
 -0 仅存储,不压缩,只是打包;不使用任何 ZIP 压缩
 -M 不创建条目的清单文件 META-INF/MANIFEST.MF
 -i 为指定的 jar 文件生成索引信息
 -C 更改为指定的目录并包含其中的文件

列出指定文件的路径:

jar -tvf eureka-server.jar | grep application.yml

Java增量更新 jar包增量更新_spring boot_12