You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需重部署完整Fat Jar,修改已上线的Spring Boot应用?

优化Spring Boot Fat Jar传输的方案

1. 仅传输修改的类文件并更新Jar

当你只修改了少量代码时,完全可以只传输编译后的.class文件,再在服务器上更新Fat Jar:

  • 本地找到编译后的目标类文件(通常在target/classes/目录下,路径对应包结构,比如com/example/demo/ModifiedClass.class)
  • 用FileZilla或scp仅传输这个小体积的.class文件到服务器的临时目录
  • 在服务器上执行Jar更新命令,将类文件替换到Fat Jar中:
    jar uf /path/to/your-app.jar com/example/demo/ModifiedClass.class
    
  • 重启应用即可生效

2. 开发环境用Spring Boot DevTools远程热部署

如果是开发阶段频繁修改代码,可以用DevTools实现远程热部署,无需手动传输文件:

  • 本地项目添加DevTools依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    
  • 在服务器启动应用时添加JVM参数开启远程连接:
    java -jar your-app.jar --spring.devtools.remote.secret=your-secret-key
    
  • 本地IDE中配置远程DevTools连接(以IDEA为例:Run → Edit Configurations → 添加Remote,设置服务器地址和端口)
  • 修改代码并编译后,DevTools会自动将更新的类同步到服务器,应用会自动重启加载新类

3. 拆分Jar为分层结构(适合生产/预发布环境)

利用Spring Boot的分层Jar功能,将依赖包和业务代码分离,每次仅传输业务代码层:

  • 在pom.xml中配置分层打包:
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <layers>
                        <enabled>true</enabled>
                    </layers>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • 打包后会生成包含分层信息的Jar,服务器上可以用spring-boot-jarmode-layertools工具解压Jar,将依赖层和业务层分开存放
  • 后续更新时,仅打包并传输业务代码层的内容,无需重复传输体积庞大的第三方依赖包

4. 用rsync做增量传输

如果必须传输整个Jar,用rsync工具替代FileZilla,它会对比本地和服务器的Jar文件差异,仅传输变化的部分:

  • 本地执行增量传输命令:
    rsync -avz --progress your-app.jar user@your-server-ip:/path/to/deploy/
    
  • 第一次传输是全量,后续仅传输Jar中变化的字节块,速度比全量传输快很多

内容的提问来源于stack exchange,提问作者Nadirspam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:15:38