当前位置: 首页 > 科技观察

推荐大家使用JRebel,提高开发效率

时间:2023-03-18 15:03:50 科技观察

项目每次启动都要一分多钟,改一行代码就重启难受?推荐一款提高工作效率的热加载JVM插件:JRebel。JRebel的作者也用了很长时间。这个产品真的帮我节省了很多时间,所以强烈推荐大家使用。这是一个用于热加载的JVM插件。IDEA也提供了官方的JRebelIDEA插件。使用和安装都非常简单,动动手指就能找到很多安装教程。推荐参考本文破解教程,简单易用:《JRebel破解最简单的使用》,链接:https://juejin.cn/post/6844903950781677582。安装插件后,在idea左侧工具栏可以看到jrebel选项。点击后勾选需要使用jrebel插件的应用,如下图。勾选后,当前项目的DEBUG栏会出现一个带有jrebel标志的调试按钮,如下图。当我们修改一个类时,如果想立即生效,可以在当前类的编辑窗口中右击,选择CompileAndReloadFile,如下图所示。官网强调JRebel是一个用于热加载的JVM插件,那么热加载和热部署有什么区别呢?热部署:不重启jvm进程,重新加载整个web应用;热加载:类在运行时重新加载。著名的Tomcat采用热部署方式,支持多web应用的部署和重新部署,无需重启JVM。对于web应用,已经重启,而JRebel采用热加载的方式,让修改生效,无需重启应用。如果你做过Android应用开发,那么你应该对一个词不陌生:hotfix。2017年在做Android应用开发的时候,热修复技术非常流行,比如流行的代表:手Q空间超级补丁技术、微信Tinker、阿里百川HotFix。手机QQ空间超级补丁技术和微信Tinker的实现原理都是在应用启动时用新的dex替换旧的dex(替换类),需要重启应用才能生效。阿里百川推出的HotFix不同于前两者,下拉补丁后,无需重启应用,即可立即生效。为什么Android应用开发领域的热修复如此火爆?与WEB应用更新不同,WEB应用更新是用户被动接受的,而Android版本更新则需要用户主动更新。使用热修复可以让用户被动接受更新,在应用重启时动态修复bug,优化用户体验,降低应用的卸载率。随着后端项目的不断膨胀,很多依赖框架的初始耗时越来越长。热加载已经开始用于提高后端开发效率,用于后端开发和调试。当然,热加载也被用来修复线上的bug,但是在微服务容器化部署的时代,这样做的价值已经体现不出来了。你可能会说,现在微服务还不是很臃肿,本地调试重启也就几秒,使用效率不明显。但是重启后是否需要重新登录或者做一些初始化工作就不好说了。hotreloading虽然有用,但是它为我们节省了大部分重写代码的重启时间。但并不是所有的场景都可以使用热重载来代替重启。如果我们更改了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不开源。如果让我实现一个简单的热加载,我也有一个简单的想法。通过已知的JavaAgent和IDEA插件知识,可以通过动态重载类完成简单的方法代码重写,也会有应用场景,比如Fix调试时发现的空指针异常,不涉及其他的业务逻辑错误框架、组件逻辑错误等,以避免应用程序过度重启。本文转载自微信公众号“爪哇艺术”,可通过以下二维码关注。转载本文请联系爪哇艺术公众号。