基于JRebel的热部署实践
SpringBoot原生提供了DevTools模块用于实现热部署,但需要向项目中引入该依赖,较为不便。故这里我们将介绍基于JRebel的热部署技术
服务搭建
这里先在CentOS 8环境下安装Docker。与此同时,为避免普通账号在执行docker相关命令时需要root权限,故在下述命令中通过使用gpasswd命令将普通账号加入docker用户组来方便日常操作
# 通过阿里源安装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自启动
# 拉取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服务是否可用。测试结果如下,符合预期
配置IDEA
在IDEA中安装 JRebel and XRebel for IntelliJ 插件
在IDEA中配置勾选 Build project automatically
通过Search Everywhere(可通过连按两次Shift键 或 Navigate->Search Everywhere 打开)搜索、打开 Registry...
打开Registry后,勾选 compiler.automake.allow.when.app.running 项,重启IDEA
激活JRebel
先通过 http://{宿主机IP}:9100/guid 获取guid,如下所示
然后在IDEA中JRebel配置项进行激活,这里我们选择Team URL的方式。分别填写 http://{宿主机IP}:9100/{上一步获取的guid} 、任意邮箱。如下所示
至此,我们的JRebel就已经激活成功了
实践
可以看到JRebel提供了两个按钮,分别用于支持热部署的Run、Debug
当我们修改源码后,通过Build -> Build Projec即可手动触发编译并通过JRebel进行热部署,十分方便