推荐你使用JRebel提升开发效率

开发 项目管理
项目每次启动都要一分多钟,改一行代码就要重启很难受?推荐一款提高工作效率的热加载JVM插件:JRebel。

[[393851]]

项目每次启动都要一分多钟,改一行代码就要重启很难受?推荐一款提高工作效率的热加载JVM插件:JRebel。

JRebel笔者也用很长一段时间了,这货确实帮我省了不少时间,所以才强烈推荐大家使用。

这是一款实现热加载的JVM插件,官方也为IDEA提供了JRebel IDEA 插件,使用和安装也都非常简单,动动手指就能找到很多安装教程。

推荐参考这篇文章的破解教程,简单可用:《JRebel破解最简单的使用》,链接:https://juejin.cn/post/6844903950781677582。

安装插件后,在idea的左侧工具栏可以看到jrebel选项,点开后勾选需要使用jrebel插件的应用,如下图所示。

勾选后,当前项目的DEBUG一栏会出现有jrebel logo的debug按钮,如下图所示。

当我们修改某个类后,如果想要即时生效,可在当前类的编辑窗口中右键,选择Compile And Reload File,如下图所示。

官网强调JRebel是实现热加载的JVM插件,那热加载与热部署有何不同呢?

  • 热部署:jvm进程不重启,重新加载整个web应用;
  • 热加载:运行时重新加载类。

我们熟知的Tomcat就是使用热部署实现不重启JVM支持多web应用部署以及重新部署,对web应用而言是已经重启了,而JRebel是使用热加载实现不重启应用也能使修改生效。

如果你做过Android应用开发,那么你应该还熟悉一个词:热修复。

17年笔者在做Android应用开发的时候热修复这项技术就非常火,如热门代表:手Q空间超级补丁技术、微信Tinker、阿里百川HotFix。手Q空间超级补丁技术、微信Tinker在实现原理上都是通过在应用启动时将新的dex替换旧的dex实现(替换class),需要应用重启才生效,阿里百川推出的热修复HotFix则不同于前两者,下拉补丁后无需重启应用就能立即生效。

为什么Android应用开发领域的热修复可以那么火?不同于WEB应用更新,WEB应用更新用户是被动接受,而Android版本更新需要用户主动去更新。而使用热修复可以实现让用户被动接受更新,在应用重启时神不知鬼不觉的动态修复bug,优化用户体验,同时也就减少APP的卸载率。

随着后端项目不断臃肿,导致依赖的很多框架初始耗时越来越长,热加载开始被用于提升后端开发效率,被用到后端开发调试上。当然,也有使用热加载实现修复线上bug的,但在微服务容器化部署时代,已经体现不出这样做的价值了。

你可能会说,现在微服务不会很臃肿,本地调试重启也就几秒钟的事情,使用它效率也不明显。但如果重启需要重新登录或者说需要做一些初始化工作就不好说了。

尽管热加载很实用,它可以帮我们省去大部分改写代码的重启时间。但也并不是所有场景都能使用热加载替代重启。

如果我们改动的是Mybatis的SQL、Spring的注解或配置类等,我们依然需要重启应用。原因很好理解,我们就以依赖Spring和Mybatis框架的应用为例说明。

首先是修改Spring配置类或者一些类上的注解重新编译热加载后发现修改并未生效,这是因为Spring只在容器启动时应用配置类、扫描Bean类时读取类上的注解等。

其次是Mybatis,无论我们修改的是注解上的Sql还是xml文件中的Sql都不会生效,因为Mybatis初始化时就需要读取xml文件中的sql或者接口方法上注解的sql来为接口生成代理类,后续不会再用到注解或xml文件,因此动态修改不会生效。

说到Mybatis,笔者找到一款IDEA插件能够解决修改sql需要重启应用的问题:【jrebel-mybatisplus-idea-plugin】https://github.com/SweetInk/jrebel-mybatisplus。

关于JRebel的实现原理笔者也不了解,因为找不到更多资料,JRebel也不开源。如果让我实现一个简单的热加载,我也有一个简单的思路,通过已知的Java Agent和IDEA插件知识,可以通过动态重新加载类的方式完成简单的方法代码改写,也会有应用场景,如修复调试时发现的空指针异常、不涉及其它框架的业务逻辑错误、组件逻辑错误等,避免过多的应用重启。

本文转载自微信公众号「Java艺术」,可以通过以下二维码关注。转载本文请联系Java艺术公众号。  

 

责任编辑:武晓燕 来源: Java艺术
相关推荐

2022-06-28 10:58:21

工具Java

2022-05-27 08:40:27

java工具

2018-02-04 22:29:21

iOS开发

2021-12-21 14:00:25

WebpackDevServer的开发

2009-06-05 15:04:36

Eclipse代码模版

2024-02-27 11:17:38

前端自动化测试开发

2010-08-12 17:56:58

ibmdwRational

2022-07-18 08:08:16

Go​语言技巧

2018-03-06 17:24:57

2012-07-26 10:51:00

JavaScript

2019-10-09 10:10:42

软件Windows程序员

2015-07-27 09:49:39

IOS开源库

2016-10-09 20:07:43

2020-03-12 09:19:55

前端开发Chrome

2019-07-26 12:18:41

JavaSQL网络硬盘

2020-08-09 18:06:57

Linux系统工具

2018-01-19 22:36:23

idea插件编码

2022-09-23 08:00:00

开发安全低代码平台

2020-11-25 19:57:15

开发技能代码

2024-06-13 09:50:45

点赞
收藏

51CTO技术栈公众号