编写:bravo1988
校审:养兔子的大叔
时间:2020-02-12

日常开发中,我们经常需要测试。测试过程中,如果发现bug,需要修改代码,然后重启项目,继续测试。如果项目很大,有时重启需要耗费几分钟,非常浪费青春。

Java程序员的诉求是:希望IDEA修改代码后,不需要重启即可得到更新后的数据。

网上大多介绍devtools和jrebel,我补充一个IDEA自带的热更新:

  • SpringBoot官方提供的devtools
  • IDEA热更新配置
  • jrebel(收费)

我的IDEA版本是最新的2019.3,如果有问题,请以IDEA2019.3为准。

为了确保演示效果,请对Chrome做以下设置(不做也没啥事~):
image.png


devtools

先介绍被我“嫌弃”的devtools。

我看了网上很多帖子,都在吹SpringBoot的devtools。说句实话,大家都是抄来抄去,很多配置其实压根不需要。很多人并不知道使用devtools的正确姿势,经过他们的介绍,让我觉得devtools像傻子一样,非常鸡肋。

很多视频介绍devtools时说,要先在pom中导入devtools依赖,然后对IDEA做各种设置,最后说了句:

好啦,大功告成。以后修改代码就不需要手动重启了,只要点一下”build project”即可。

我打开IDEA看了下,”build project”和”重启”不就隔了15cm吗?敢情搞了半天,就是让鼠标少移动15cm?
image.png

那我装你干嘛?我点”build project”和点击”重启”有啥区别?

(吐槽一下而已,实际上devtools稍微快一些,重启只会加载修改过的代码

其实,使用devtools就两步:

  • 引入依赖

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-devtools</artifactId>
    4. <scope>runtime</scope>
    5. <optional>true</optional>
    6. </dependency>
  • 设置”Build project automatically”

image.png

设置”Build project automatically”后,就不用再傻傻地手动build了,只要改了代码,IDEA监测到后就会自动重启。从修改代码到自动重启,可能需要等待10秒左右,并不是实时的。

既然是触发重启,所以不管你更改方法体还是URL映射,都是生效的。

有人可能会吐槽,做了这么多只是把手动重启改为自动重启?实际上,现在的重启并不会加载全部代码,而是只加载部分修改后的代码,所以速度会快很多。

devtools的优缺点:

  • 解决了手动重启、重启耗时的问题。因为本质是重新启动,所以对修改URL映射和返回值均有效
  • 需要额外引入依赖(勉强算缺点)

IDEA自带热更新

接下来,介绍一个IDEA自带的热更新功能。

先看原来的效果:
1.gif
更改方法体代码,数据没有更新
设置IDEA热更新
image.png

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

image.png
最好把templates里的SpringBoot模板也更改了,这样新增SpringBoot项目就不用设置了

解释一下两个配置:

  • On update action:我们主动更新(比如build project,重新编译等)
  • On frame deactivation:IDEA界面被其他界面覆盖时自动更新(不在最前)

更改后的效果:
2.gif

请注意,切换到浏览器时,底部导航栏IDEA有个更新的进度条,此时正在热更新。

上面操作对静态资源也生效,这里不再演示。

IDEA热更新配置的优缺点:

  • 无需引入额外依赖,操作简单。把重新加载延迟到切换应用时(相比devtools每次更改就重启,勉强算优点)
  • 只能更新方法体的代码,对URL映射和返回值的更改无反应

比如说,原本是/getUser,你改为/getUsers,IDEA的热更新无能为力,只能重启。

但是,个人觉得这个功能已经够用了。写完代码切换到Postman的时间足够IDEA完成热更新了,而且大部分时候我们修改的都是方法体的代码。


jrebel

这个插件是收费的,需要破解。最早是在小码哥的视频里看到的,还挺好用的。

同样的,jrebel已经与时俱进,配置已经变成傻瓜式操作了,不像网上其他博客说的那么繁琐。
总的来说就两步:

  • 下载jrebel插件
  • 破解后,按jrebel软件提示完成配置

下载插件

可以直接在IDEA的Plugins下载,安装,重启。
image.png

考虑到很多人可能打不开Marketplace,这里提供jar包,下载后选择本地安装即可:
链接:https://pan.baidu.com/s/1n0i6tiruMfG7zxPTt-2rIw 密码:cs6t

安装步骤:
image.png

image.png

image.png

破解

上一步重启后大家应该可以看到IDEA右侧有jrebel的面板,如果不激活默认只能使用第一项配置。
image.png

jrebel激活

选择第一种在线激活即可。

激活后,把其他几项配置点一下即可。

image.png

image.png

最终可以看到:
image.png

搞定后,记得要用jrebel的启动按钮,而不是IDEA原生的:
image.png

jrebel比IDEA自带的热更新更强大,即使你改了映射URL,也能立即监测更新:
3.gif

小结

我个人觉得,IDEA的热更新或者devtools够用了。jrebel本身是收费的,需要额外破解,而且会破坏原生的界面…作为强迫症患者,看着多少有点难受。