SpringBoot 配置热部署

2024/1/25 SpringBoot 框架

当在开发项目时,修改了代码,每次都需要重启的话,很费时间,所以需要热部署来提高我们的开发效率。

案例项目地址 (opens new window)

# 1、热部署与热加载

  • 热部署

  • 服务器运行过程中,不停机直接重新部署项目。
  • 热部署是重新加载整个应用,也就意味着内存都会被释放,比热加载干净,也更费时间。
  • 热加载

  • 服务器运行中重写加载class类,也就是不重启就再次编译加载。
  • 热加载依赖于Java类加载机制。内存不释放,速度快。
  • 热加载针对的是单个字节码文件,指的是重新编译后,不需要停机,应用程序就可以加载使用新的class文件。

热部署和热加载配置方式

  • 热部署:配置devtools方式、JRebel插件方式。
  • 热加载:JRebel插件方式。(推荐,一般不需要热部署重启,对单个文件进行更新即可

热部署和热加载配合使用,能不需要每次修改代码都重写启动,提高开发效率。

# 2、devtools实现热部署

spring-boot-devtools(简称devtools)是SpringBoot团队提供的热部署插件。

# 2.1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 可以防止将devtools依赖传递到其他模块中 -->
    <version>3.2.1</version>
</dependency>
1
2
3
4
5
6

# 2.2、IDEA配置

  • 不配置,手动触发重启更新,快捷键(Ctrl+F9)

  • IDEA开启运行时编译,自动重启更新

# 2.3、application.yml配置

spring:
  devtools:
    restart:
      enabled: true  #设置开启热部署
      additional-paths: src/main/java #重启目录
      exclude: WEB-INF/**
1
2
3
4
5
6

devtools本身基于重启方式,不是真正的热替换方案,推荐还是JRebel热加载好。

# 3、JRebel插件实现热部署

JRebel本身是收费的,这里提供一种使用方式。

# 3.1、安装JRebel插件

安装插件Jrebel and XRebel

可以看到插件其实包含了JRebel和XRebel两个部分。

  • Jrebel:用于热部署、热加载,更新速度快,生效速度快。
  • XRebel:用于显示接口访问速度和访问期间sql的拦截,监控,sql执行时间统计,展示。

# 3.2、配置Jrebel注册码

配置Jrebel注册码参考图

还有一种方式

邮箱随便配置即可

# 3.3、使用方式

  • 启动

  • 修改代码热加载

修改代码后,直接快捷键:Ctrl+Shift+F9,热加载编译当前文件。

  • 修改热部署生效时间

如果改为1s的话,修改代码后马上就生效了,不想立即生效的话,可以将时间修改长一点,然后快捷键方式单个文件热加载编译。

# 3.4、MyBatis-Plus热加载补充

  • MyBatis-Plus的XML文件使用JRebel热加载时会失败,需要重启,是因为MyBatis-Plus重写了MyBatis的一些方法,可以自己网上查查原因,这里不细说。
  • 解决方式:安装JRebel MybatisPlus extension插件。

安装JRebel MybatisPlus extension插件