Ubuntu Java热部署实战指南
一 方案总览与选择
- 开发期优先选用:
- Spring Boot DevTools(零配置、快速重启,适合 Spring Boot)。
- JRebel(商业插件,支持方法体、字段、类结构、注解、Spring 配置等大多数变更,几乎不重启)。
- IDEA HotSwap / Arthas HotSwap(轻量字节码替换,适合小改;对结构性变更有限制)。
- DCEVM + HotswapAgent(免费增强版 JVM,覆盖面广,但配置复杂、兼容性需验证)。
- 生产期不建议启用热部署,采用更稳妥的发布策略:蓝绿部署、滚动更新、金丝雀发布。
- 原理提示:HotSwap 受限于 JVM,通常仅支持方法体变更;DevTools 本质是“快速重启”(双类加载器);JRebel/HotswapAgent 通过字节码增强或替换实现更广覆盖。
二 Spring Boot 项目在 Ubuntu 的两种高效做法
-
使用 Spring Boot DevTools(开发期推荐)
- 添加依赖(Maven):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
或 Gradle:
developmentOnly("org.springframework.boot:spring-boot-devtools")
- IDEA 设置:File → Settings → Build, Execution, Deployment → Compiler → 勾选 Build project automatically。
- 运行应用:使用 IDE 的 Debug 或
mvn spring-boot:run,保存代码后会自动触发“快速重启”。
- 说明:DevTools 通过 base classloader 与 restart classloader 加速重启,严格意义并非“不重启生效”。
-
使用 JRebel(商业、覆盖广)
- 在 IntelliJ IDEA 插件市场安装 JRebel 并重启 IDE。
- 打开项目 → File → Project Structure → Facets 启用 JRebel;Run/Debug Configurations 在 Tomcat Server / Spring Boot 配置中添加 JRebel。
- 按提示激活(试用或授权)。
- 适用变更:方法体、字段、方法、类结构、注解、Spring 配置等;对生产环境不建议启用。
三 非 Spring Boot 或通用 Java 项目的可选方案
- IDEA HotSwap(轻量、快速)
- 适用:仅修改方法体等有限变更。
- 操作:在 IDEA 以 Debug 模式运行,修改后 Build(如 Ctrl+Shift+F9),多数情况下可立即生效。
- 限制:对新增字段、方法、注解、类结构变更无效,需要重启。
- Arthas HotSwap(服务器字节码热替换)
- 本地安装 Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
- IDEA 安装 ArthasHotSwap 插件;修改类后执行 Maven 编译,右键 ArthasHotSwap → Swap This Class,复制生成的远程命令。
- 在服务器上粘贴并运行该命令,看到热替换成功日志即可。
- 提示:尽量在测试环境使用;若 Arthas 占用进程,可执行
stop 退出后再操作。
- DCEVM + HotswapAgent(免费增强)
- 思路:用 DCEVM 替换/增强 JVM,配合 HotswapAgent 实现更广的类结构热替换。
- 优点:覆盖面广、免费;缺点:配置复杂、对部分框架/版本可能有兼容性问题,需充分回归测试。
四 传统 Tomcat JSP 项目与容器化场景
- Tomcat JSP 热部署
- Docker 开发期热更新
五 注意事项与最佳实践
- 明确区分环境:热部署/热加载仅用于开发或测试;生产环境请关闭,采用 蓝绿、滚动、金丝雀 等发布策略以保证稳定性与可回滚性。
- 变更边界:原生 HotSwap 仅支持方法体变更;结构性变更(新增字段/方法/注解/类)需借助 JRebel / DCEVM+HotswapAgent / 重启。
- 静态资源:前端 JS/CSS/HTML 可在 IDEA 启用 Live Edit(File → Settings → Build, Execution, Deployment → Debugger → Live Edit),或使用前端框架自带热重载工具。
- 故障排查:确认以 Debug 模式运行(HotSwap/Arthas 需要);查看插件/控制台日志;必要时手动触发编译(如 Ctrl+Shift+F9);验证变更是否在工具支持范围内。