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文件的函数名、参数有变化,都通过配置文件修改和运行时读取
方案:这应该是个比较成熟的技术了,之前一直有这个想法,但是发现别人已经实现了,就拿来用了一下。这里只是作个使用记录。
参考方案链接: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文件的函数名、参数有变化,都通过配置文件修改和运行时读取
相关文章推荐
- java中的类是动态加载的,我们先看一下我们常用的类加载方式,先有一个感性的认识,才能进一步
- 实现Web页面中级联菜单的设计/实现动态加载列表框/实现自动刷新页面/实现Web页面的局部动态更新/实现自动完成功能
- 在java中使用amcharts可动态更新的flash统计图
- 请问ATTC如何在表格数据从服务器动态加载后更新flash?
- java动态加载jar包
- Java的动态加载包
- 怎么在android中动态加载一个java 类?
- Java 动态加载类
- java 动态编译.java文件,然后动态加载运行
- jsp/servlet使用ajax动态加载dtree, dtree样式/图片修改 (java 生成dtree servlet json)
- JAVA动态加载-类查询-jdk,jre
- [转]以列表形式显示动态加载的数据(JavaScript,Java,JSP,HTML)
- 动态加载Java运行环境和运行实例
- JAVA的多态接口动态加载类
- 在Eclipse中配置动态加载Class的JVM插件--JavaRebel
- Java中类的显式动态加载的两种方式
- 反射机制下的Java动态加载方法
- java用URLClassLoader动态加载JDBC
- Java 动态加载
- java动态加载jar包