概述:热部署(HotSwap)也叫热加载、热更新、热替换,它避免了少量代码更改而带来的避免重启时间,在大型项目中尤其有用,三个实现SpringBoot热部署方法,配合IDEA使用。

  • dev-tools可以实现大部分代码的热部署,但是和数据库连接池有冲突,容易造成数据库连接池关闭。
  • JRebel需要用网络注册,无网环境配置不太行。
  • HotSwap 插件IDEA自带,有时不太生效。

Dev-tools(推荐)

spring-boot-devtools 是 Spring Boot 提供的开发者工具,它会监控当前应用所在的 classpath 下的文件发生变化,进行自动重启

注: dev-tools并不是热部署,而是一种较快的重启方式

引入Maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>


<!-- 这是spring boot devtool plugin 热部署1常用,如果不添加似乎也可以运行-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>

配置yaml

application.yamlapplication.yml 配置,如果是.properties需自行转换

1
2
3
4
5
6
7
8
9
spring:
devtools:
restart:
#热部署生效
enabled: true
#设置重启的目录
#additional-paths: src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启
exclude: WEB-INF/**

到这里就已经可以了,如果项目代码更改,在项目使用Debug模式启动下,只需要在IDEA上方 Build->Build Project即可(快捷键为 Ctrl+F9)

如果这一步也想省掉,执行以下步骤。

自动编译

打开IDEA设置,在Compiler 选项卡,将 Build project automatically 勾选

image-20221222233042106

此时dev-tools限定在Debug模式下启动项目,如果想要Run模式也能使用dev-tools,Ctrl+Shift+Alt+/ ,勾选Registry下的Compiler autoMake allow when app running

image-20221222233549082

JRebel

一款知名的Java热部署插件

IDEA安装JRebel插件

在idea的settings -> Marketspace -> 搜索jrebel -> 下载JRebel and XRebel for IntelliJ

在线GUID地址:在线生成GUID

https://www.guidgen.com/ 生成GUID后, 服务器地址为 https://jrebel.qekang.com/{GUID}

打开JRebel

选择Connect to online licensing service

image-20221222234157794

以后通过JRebel启动项目即可

设置离线模式

在IDEA中 settings -> JRebel & XRebel -> 点击Work offline

自动编译

同Dev-tools的自动编译

HotSwap

IDEA自带的插件,而且与dev-tools不兼容,需去除dev的依赖。

image-20221222234756047

使用和自动编译同Dev-tools。