热部署分两种方案,HotSwap和JRebel。HotSwap通过调用JDK的DebuggerAPI实现热部署,但是仅限方法体的修改,增减方法会导致热部署失败。JRebel通过监控磁盘.class文件的变化,动态更新类,支持类结构的改变,比如增减方法。
IDEA天然支持HotSwap,如果用JRebel需要安装相应的插件JRebel for IntelliJ
服务器填写http://139.199.89.239:1008/67ea78bb-3eb0-49b7-9ab6-5a76aa26bd08
帐号随便填写即可
IDEA中的Reload
操作即为热部署。如果是普通方式启动项目,热部署方案使用HotSwap
。如果项目用JRebel启动,热部署方案就使用JRebel
IDEA热部署的几种操作方式:
Build -> Recompile __CURRENT__.java
重新编译Run -> Reload Changed Classes
重新加载发生变化的类Build -> Rebuild Project
重新构建项目Run -> Reload Changed Classes
重新加载发生变化的类Build, Execution, Deployment -> HotSwap
勾选 Build project before reloading classes
Run -> Reload Changed Classes
重新编译并重新加载发生变化的类在项目的运行配置界面,Spring Boot -> Running Application Update Policies
,在On Update action
下拉框中选择Update classes and resources
,将会在更新操作触发后,自动进行重新编译
Run -> Update __APP_NAME__ application
此时会触发编译操作Run -> Reload Changed Classes
如果将On frame deactivation
设为Update classes and resources
,将会在IDE窗体失焦后触发编译操作
Build... -> Debugger -> HotSwap => Build project before reloading classes : true
热部署前构建项目Build... -> Debugger -> HotSwap => Reload classes after compiliation : Always
构建项目后热部署JRebel -> Advanced => Enable IntelliJ automatic compiliation
JRebel开启IntelliJ自动编译 理论上开启此选项后,修改代码后会自动热部署,但是我的JRebel自动部署过几次后,就再也没有自动触发过IDEA的热部署
对于HotSwap,需要Compile/Build + Reload
对于JRebel,仅需要Compile/Build。 Reload操作会由JRebel通过磁盘监控自动完成
如果项目复杂,JRebel可能没重启快。慎用