编写:bravo1988
校审:养兔子的大叔
时间:2020-02-12
日常开发中,我们经常需要测试。测试过程中,如果发现bug,需要修改代码,然后重启项目,继续测试。如果项目很大,有时重启需要耗费几分钟,非常浪费青春。
Java程序员的诉求是:希望IDEA修改代码后,不需要重启即可得到更新后的数据。
网上大多介绍devtools和jrebel,我补充一个IDEA自带的热更新:
- SpringBoot官方提供的devtools
- IDEA热更新配置
- jrebel(收费)
我的IDEA版本是最新的2019.3,如果有问题,请以IDEA2019.3为准。
为了确保演示效果,请对Chrome做以下设置(不做也没啥事~):
devtools
先介绍被我“嫌弃”的devtools。
我看了网上很多帖子,都在吹SpringBoot的devtools。说句实话,大家都是抄来抄去,很多配置其实压根不需要。很多人并不知道使用devtools的正确姿势,经过他们的介绍,让我觉得devtools像傻子一样,非常鸡肋。
很多视频介绍devtools时说,要先在pom中导入devtools依赖,然后对IDEA做各种设置,最后说了句:
好啦,大功告成。以后修改代码就不需要手动重启了,只要点一下”build project”即可。
我打开IDEA看了下,”build project”和”重启”不就隔了15cm吗?敢情搞了半天,就是让鼠标少移动15cm?
那我装你干嘛?我点”build project”和点击”重启”有啥区别?
(吐槽一下而已,实际上devtools稍微快一些,重启只会加载修改过的代码)
其实,使用devtools就两步:
引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>
设置”Build project automatically”

设置”Build project automatically”后,就不用再傻傻地手动build了,只要改了代码,IDEA监测到后就会自动重启。从修改代码到自动重启,可能需要等待10秒左右,并不是实时的。
既然是触发重启,所以不管你更改方法体还是URL映射,都是生效的。
有人可能会吐槽,做了这么多只是把手动重启改为自动重启?实际上,现在的重启并不会加载全部代码,而是只加载部分修改后的代码,所以速度会快很多。
devtools的优缺点:
- 解决了手动重启、重启耗时的问题。因为本质是重新启动,所以对修改URL映射和返回值均有效
- 需要额外引入依赖(勉强算缺点)
IDEA自带热更新
接下来,介绍一个IDEA自带的热更新功能。
先看原来的效果:
更改方法体代码,数据没有更新
设置IDEA热更新

只对当前SpringBoot项目有效,如果希望对以后所有SpringBoot项目起效,修改左侧末尾的templates

最好把templates里的SpringBoot模板也更改了,这样新增SpringBoot项目就不用设置了
解释一下两个配置:
- On update action:我们主动更新(比如build project,重新编译等)
- On frame deactivation:IDEA界面被其他界面覆盖时自动更新(不在最前)
更改后的效果:
请注意,切换到浏览器时,底部导航栏IDEA有个更新的进度条,此时正在热更新。
上面操作对静态资源也生效,这里不再演示。
IDEA热更新配置的优缺点:
- 无需引入额外依赖,操作简单。把重新加载延迟到切换应用时(相比devtools每次更改就重启,勉强算优点)
- 只能更新方法体的代码,对URL映射和返回值的更改无反应
比如说,原本是/getUser,你改为/getUsers,IDEA的热更新无能为力,只能重启。
但是,个人觉得这个功能已经够用了。写完代码切换到Postman的时间足够IDEA完成热更新了,而且大部分时候我们修改的都是方法体的代码。
jrebel
这个插件是收费的,需要破解。最早是在小码哥的视频里看到的,还挺好用的。
同样的,jrebel已经与时俱进,配置已经变成傻瓜式操作了,不像网上其他博客说的那么繁琐。
总的来说就两步:
- 下载jrebel插件
- 破解后,按jrebel软件提示完成配置
下载插件
可以直接在IDEA的Plugins下载,安装,重启。
考虑到很多人可能打不开Marketplace,这里提供jar包,下载后选择本地安装即可:
链接:https://pan.baidu.com/s/1n0i6tiruMfG7zxPTt-2rIw 密码:cs6t
安装步骤:


破解
上一步重启后大家应该可以看到IDEA右侧有jrebel的面板,如果不激活默认只能使用第一项配置。
选择第一种在线激活即可。
最终可以看到:
搞定后,记得要用jrebel的启动按钮,而不是IDEA原生的:
jrebel比IDEA自带的热更新更强大,即使你改了映射URL,也能立即监测更新:
小结
我个人觉得,IDEA的热更新或者devtools够用了。jrebel本身是收费的,需要额外破解,而且会破坏原生的界面…作为强迫症患者,看着多少有点难受。


