jreloader动态从新加载class而不重启JVM
田念
2023-12-01
jreloader动态重新加载class而不重启JVM
在Tomcat 中可以配置 reloadable="true" 做到类改变后,Tomcat 重新加载。其实这个过程大约也是当 Tomcat 发现有改变的类会重新启动一个新的应用程序重新加载所有的类来服务于新的请求,只是不需要你手动的去执行 shutdown.sh(.bat),再 startup.sh(.bat),但这样有个问题就是,修改一个class需要花费一定时间去让Tomcat重新自动加载部署,非常浪费时间。
频繁重启对于调试是一种煎熬,因此希望能找到一个工具能在类改动的时候不需要重新启动当前应用而是只加载修改过的class, 当然不希望重启 Tomcat了,能实现此功能的工具有 JavaRebel 和 jreloader,其中前者是收费的,后者是开源的.
jreloader的使用方法可以查看下载ZIP包中的INSTALL.txt,在Eclipse额的Tomcat插件中的使用方法如下。
1.进到Tomcat 配置的Overview 页,点击 Open launch configuration, 弹出 Edit Configuration 窗口,再到 Arguments 标签页中,VM arguments: 输入框中加上:
-noverify -javaagent:E:\jreloader-0.4\jreloader.jar -Djreloader.dirs=E:\eclipse3.7\workspace\CIATest\WebContent\WEB-INF\classes,E:\eclipse3.7\workspace\CIAServer0515\WebContent\WEB-INF\classes
2. 把Tomcat 里该应用的reloadable 设为false,阻止Tomcat 去管理,而完全由jreloader 去承担类的热加载。
3. 启动Tomcat,修改一个类,由jreloader去加载修改的类,会看到日志:
E:\eclipse3.7\workspace\CIATest\WebContent\WEB-INF\classes\cia\test\transtest\action\TransPageAction.class
[JReloader:INFO ] Reloading class cia.test.transtest.action.TransPageAction