1 概述
所谓热部署,对于Java应用程序来说,就是在运行时更新Java类文件.IDEA可以使用自带的Spring Boot热部署的方式进行本地/远程热部署,或者使用JRebel进行本地/远程热部署,不过需要安装JRebel and XRebel for IntelliJ这个插件.本文将会介绍这两种方式来进行热部署,这应该是网上能找到的最详细的IDEA热部署的文章,相信在看完之后,开发效率会大大提升,不再需要像以前那样手动打jar/war包然后上传到服务器等一系列繁琐操作.
2 环境
- IDE:IntelliJ IDEA 2019.3.1
- 本地Tomcat:9.0.30
- JRebel and XRebel for IntelliJ:2020.2.0
- 服务器:CentOS 8.1.1911
- 服务器Tomcat:9.0.33
3 IDEA热部署
3.1 工程部分
3.1.1 新建工程
这里新建一个Spring Boot工程来进行热部署的测试.
打包方式改为war,因为后面要使用外部Tomcat: 勾上热部署工具Spring Boot DevTools与使用内嵌Tomcat的Spring Web. 
3.1.2 测试文件
新建一个响应Get请求的Controller:

3.2 内部Tomcat热部署
Spring Boot内嵌了一个Tomcat,可以直接使用其进行热部署.
3.2.1 IDEA设置
首先需要开启Compiler中的Build project automatically:




3.2.2 测试
IDEA自带了一个HTTP client(其实是一个插件,不需要可以关闭),可以发送HTTP请求,新建一个HTTP Request:










3.3 外部Tomcat热部署
由于已经配置好了IDEA的相关设置,这里就不重复了,没配置的按上面的方式配置,然后需要增加一个外部的Tomcat配置.
3.3.1 外部Tomcat配置
需要增加一个外部Tomcat的运行配置:





3.3.2 测试
注意外部的Tomcat热部署不能使用Run运行,不能像内部的一样直接Shift+F10,要使用Debug运行,Shift+F9:








3.4 远程Tomcat热部署
远程Tomcat热部署比较麻烦,细节很多,一个端口错误就一堆异常,所以请耐心细看.需要三个步骤:设置服务器的Tomcat,设置IDEA的服务器配置,设置IDEA的Tomcat运行配置.最后进行测试.
3.4.1 服务器的Tomcat设置
需要处理四个端口:Tomcat的HTTP端口,JMX端口,RMI端口与调试端口. 其中HTTP端口就是常说的Tomcat端口,浏览器输入http://ip:port就可以访问到Tomcat的默认首页,在server.xml中设置,这里的是在69行的位置,使用默认的8080.

CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.rmi.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=ip
-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:12345,suspend=n,server=y"
其中JMX与RMI端口设为一致,只要没有占用随便取即可,address后面的12345是调试端口,根据需要设置即可.ip是服务器的ip地址
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
这两行表示不使用ssl连接与使用JMX客户端连接到Tomcat时不需要认证. 注意要加上
-Dcom.sun.management.jmxremote.rmi.port=8888
这个RMI端口,很多文章都没有加上这个导致部署失败. 最后修改执行权限并启动tomcat:
chmod 750 setenv.sh
./startup.sh
可以查看一下端口监听:
netstart -ano | grep -E "8080|8888|12345"

3.4.2 IDEA中的服务器设置
新建一个SFTP部署:



3.4.3 IDEA中的Tomcat设置
新建一个Tomcat Remote:



3.4.4 测试
需要以Debug模式(Shift+F9)运行,不能直接Run(Shift+F10):






4 JRebel热部署
4.1 JRebel简介

4.2 安装
从设置中的Plugins安装,搜索即可:

4.3 内部Tomcat热部署
内部Tocmat热部署非常简单,选中SpringBoot的运行配置以后,直接点击Rebel Run即可:



4.4 外部Tomcat热部署
像上面的3.3一样配置好外部Tomcat后,也是直接一键Rebel Run即可. 注意保证端口不被占用.



4.5 远程Tomcat热部署
使用JRebel进行的远程Tomcat热部署需要先打包上传,然后才能热部署.
4.5.1 打包上传
热部署之前,需要先手动打包:

4.5.2 新建脚本





4.5.3 添加远程服务器

java -jar xxx.jar -set-remote-password PASSWORD
设置),则需要勾选Server authentication并填上密码. 如果Tomcat设置了访问密码(设置方法这里查看),则需要勾选HTTP Basic authentication,并填上用户名与密码:


4.5.4 测试
然后,打开JRebel,选择部署的项目:






5 附录:jar打包
由于Spring Boot内嵌了Tomcat,可以打成jar包的形式使用内嵌的Tomcat,这样,可以避免一系列的包括目录映射,端口等繁琐的Tomcat配置.在原来的war打包形式的基础上,修改pom.xml中的




java -jar demo.jar
没问题的话就可以上传到服务器了,或者直接使用热部署,注意Tomcat与JRebel需要修改相应的配置,具体就不详细说了.
如果觉得文章好看,欢迎点赞.
同时欢迎关注微信公众号:氷泠之路.


















