基于JRebel的热部署实践

SpringBoot原生提供了DevTools模块用于实现热部署,但需要向项目中引入该依赖,较为不便。故这里我们将介绍基于JRebel的热部署技术

abstract.png

服务搭建

这里先在CentOS 8环境下安装Docker。与此同时,为避免普通账号在执行docker相关命令时需要root权限,故在下述命令中通过使用gpasswd命令将普通账号加入docker用户组来方便日常操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 通过阿里源安装Docker
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun

# 启动 Docker
sudo systemctl start docker

# 设置Docker为开机自启
sudo systemctl enable docker

# 创建docker用户组
sudo groupadd docker

# 将指定用户aaron加入docker用户组
sudo gpasswd -a aaron docker

# 更新用户组
newgrp docker

拉取镜像JRebel镜像并创建,这里通过 —restart always 选项可让容器随Docker自启动

1
2
3
4
5
6
7
8
# 拉取JRebel镜像
docker pull cliod/jrebel-server

# 创建JRebel容器
docker run -d -p 9100:9001 \
--restart always \
--name jRebel-Service \
cliod/jrebel-server

至此,可通过访问 http://{宿主机IP}:9100/guid 验证JRebel服务是否可用。测试结果如下,符合预期

figure 1.png

配置IDEA

在IDEA中安装 JRebel and XRebel for IntelliJ 插件

figure 2.jpeg

在IDEA中配置勾选 Build project automatically

figure 3.jpeg

通过Search Everywhere(可通过连按两次Shift键 或 Navigate->Search Everywhere 打开)搜索、打开 Registry…

figure 4.jpeg

打开Registry后,勾选 compiler.automake.allow.when.app.running 项,重启IDEA

figure 5.jpeg

激活JRebel

先通过 http://{宿主机IP}:9100/guid 获取guid,如下所示

figure 6.png

然后在IDEA中JRebel配置项进行激活,这里我们选择Team URL的方式。分别填写 http://{宿主机IP}:9100/{上一步获取的guid} 、任意邮箱。如下所示

figure 7.jpeg

至此,我们的JRebel就已经激活成功了

figure 8.jpeg

实践

可以看到JRebel提供了两个按钮,分别用于支持热部署的Run、Debug

figure 9.jpeg

当我们修改源码后,通过Build -> Build Projec即可手动触发编译并通过JRebel进行热部署,十分方便

figure 10.jpeg

0%