基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

Spring Boot 如何实现热部署?

知识点图片

Spring Boot 实现热部署(Hot Deployment/Hot Swapping)主要有两种方式:

  1. 使用 spring-boot-devtools(官方推荐,免费,最常用)
  2. 使用 JRebel(第三方插件,收费,功能更强大)

下面详细介绍这,两种方式的配置步骤,以 IntelliJ IDEA 为例。


方式一:使用 Spring Boot DevTools (官方方案)

DevTools 的原理实际上是快速重启。它使用两个 ClassLoader:一个加载不会变的类(第三方 Jar 包),另一个加载你会修改的类。当代码变更时,只重新加载后者,所以速度比完全重启快很多。

1. 添加依赖 (pom.xml)

pom.xml 中引入 spring-boot-devtools 依赖:

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional> <!-- 标记为可选,防止传递依赖 -->
</dependency>

2. 修改配置文件 (application.yml / properties)

虽然默认配置通常可用,但建议添加以下配置以确保生效:

yaml
spring:
  devtools:
    restart:
      enabled: true  # 开启热部署
      additional-paths: src/main/java # 监控的额外路径
      exclude: static/,public/ # 排除静态资源,修改它们不需要重启

3. IntelliJ IDEA 配置 (关键步骤)

IDEA 默认不会自动编译,因此需要修改设置让 DevTools 生效。

  • 步骤 A:开启自动编译

    • 打开 Settings (Windows: Ctrl+Alt+S / Mac: Cmd+,)
    • 进入 Build, Execution, Deployment -> Compiler
    • 勾选 Build project automatically
  • 步骤 B:允许运行时自动构建

    • 旧版 IDEA (2021.2 之前):Ctrl+Shift+Alt+/,选择 Registry,勾选 compiler.automake.allow.when.app.running
    • 新版 IDEA (2021.2 之后): 打开 Settings -> Advanced Settings -> 勾选 Allow auto-make to start even if developed application is currently running

4. 如何触发热部署

配置完成后,当你修改了 Java 代码:

  1. 自动触发: 如果开启了上述的自动编译,IDEA 失去焦点(切换窗口)几秒后会自动触发。
  2. 手动触发(推荐): 修改代码后,按下 Ctrl + F9 (Build Project),Spring Boot 会检测到变化并进行快速重启。

方式二:使用 JRebel (收费/破解方案)

JRebel 是通过修改字节码实现的真·热部署。它不需要重启 Spring 上下文,直接在内存中替换类,速度极快,且能保持 Session 状态。

1. 安装插件

在 IDEA 的 Settings -> Plugins 中搜索 JRebel and XRebel 并安装。

2. 激活

JRebel 是收费软件,安装后需要激活(可以使用试用版或购买许可证)。

3. 配置项目

  1. 在 IDEA 左下角找到 JRebel 面板。
  2. 勾选你的 Spring Boot 项目。
  3. 这会在 src/main/resources 下生成一个 rebel.xml 文件。

4. 启动与触发

  1. 启动: 不要用普通的 Run/Debug 按钮,要使用 JRebel 专属的 "Run with JRebel""Debug with JRebel" 按钮(图标通常是火箭或带 JRebel logo 的虫子)。
  2. 触发: 修改代码后,按 Ctrl + F9 (Build Project),JRebel 会提示类已重新加载,无需任何重启。

总结与对比

特性 Spring Boot DevTools JRebel
原理 冷启动优化 (Restart ClassLoader),本质是重启 字节码替换 (Hot Swap),不重启
速度 较快 (几秒钟),但在大项目中会变慢 极快 (毫秒级)
状态保持 重启后 Session 等内存数据会丢失 保持 Session 和内存状态
成本 免费 (官方自带) 收费 (价格较高)
适用场景 中小型项目,个人开发 大型单体项目,追求极致效率

建议: 大多数情况下,DevTools 配合 Ctrl + F9 已经足够使用。如果是巨型单体应用,启动一次需要几分钟的那种,强烈建议申请经费购买 JRebel

00:00
00:00