您的位置:首页 > 编程语言 > Java开发

Java动态加载,避免停服更新

2017-04-27 01:10 656 查看
背景:目前调试、运行java服务程序时,如果class文件有更新,不能动态加载更新后的class执行(仅调试时,勾选自动编译的情况下,断点所在的函数可以在修改后将断点运行到函数的第一行)。如服务程序启动过慢,或者服务程序正在执行其他操作,非常影响用户体验,甚至带来灾难。

方案:这应该是个比较成熟的技术了,之前一直有这个想法,但是发现别人已经实现了,就拿来用了一下。这里只是作个使用记录。

参考方案链接:https://www.toptal.com/java/java-wizardry-101-a-guide-to-java-class-reloading

对class文件内更新的方法的调用:

new DynamicClassLoader;ReflectUtil.getMethod;ReflectUtil.newInstance (获取Object,用于invoke);ReflectUtil.invoke

注:

1、动态加载的调用代码 (new DynamicClassLoader;ReflectUtil.getMethod;ReflectUtil.newInstance;ReflectUtil.invoke) 必须和上述链接中的实现代码放在一个jar工程里

2、动态加载调用的更新class文件对应的类和方法不必在上述jar工程里

3、尽情享受动态加载带来的乐趣吧

待改进:

1、更新class文件时,自动触发动态加载;未更新时不触发

2、动态加载的class文件的函数名、参数有变化,都通过配置文件修改和运行时读取
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: