【技术实现步骤摘要】
一种实现应用热部署的方法和装置
本专利技术涉及计算机
,尤其涉及一种实现应用热部署的方法和装置。
技术介绍
在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,重新编译上线非常费时低效。热部署是在不重启Java虚拟机的前提下,自动侦测到类(class)文件的变化,更新运行时class的行为,可以节省应用开发和发布的时间。目前类加载器(classloader)的加载机制为双亲委派。可以利用开放服务网关协议OSGI(OpenServiceGatewayInitiative)实现模块的热替换,还有基于HotSwap技术的热部署。在实现本专利技术过程中,专利技术人发现现有技术中至少存在如下问题:1.双亲委派的加载机制的加载顺序很难改变,让自定义classloader抢先加载需要监听改变的类成为了一个难题。2.在OSGI架构中如果模块之间有调用关系的话,由于耦合性强然会让应用出现短暂的功能性休克。3.HotSwap对IDE的集成依赖性强,且仅限于对方法体起 ...
【技术保护点】
1.一种实现应用热部署的方法,其特征在于,包括:/n利用与应用一一对应的自定义类加载器加载所述应用的类文件;/n当实时监控到所述应用中的配置更新后,使用新的自定义类加载器加载更新后的应用的类文件;/n将所述更新后的应用与所述新的类加载器一一对应。/n
【技术特征摘要】
1.一种实现应用热部署的方法,其特征在于,包括:
利用与应用一一对应的自定义类加载器加载所述应用的类文件;
当实时监控到所述应用中的配置更新后,使用新的自定义类加载器加载更新后的应用的类文件;
将所述更新后的应用与所述新的类加载器一一对应。
2.根据权利要求1所述的方法,其特征在于,当所述应用中的配置更新后,使用新的自定义类加载器加载更新后的应用,包括:
监控应用中已编译的类文件,当所述已编译的类文件更新,所述已编译的类文件为原始类的类文件;
读取原始类的类文件,使用第一增强组件将原始类的类型修改为接口;生成第一派生类,复制原始类的类文件中的所有方法逻辑,使第一派生类实现所述接口,以完成将原始类变为接口;
设置第二派生类,所述第二派生类能够实现所述接口;
读取原始类的类文件至第二派生类,利用第二增强组件改变原始类的类名,利用第三增强组件改变原始类的父类;
实例化第二派生类的行为。
3.根据权利要求2所述的方法,其特征在于,所述实例化第二派生类的行为,包括:
通过自定义类加载器获取类后,动态创建对象;
或修改Class.forName()和ClassLoader.findClass(),利用修改后的Class.forName()和ClassLoader.findClass(),实现实例化第二派生类的行为。
4.根据权利要求2所述的方法,其特征在于,所述读取原始类的类文件,包括:
从工作区中读取原始类的类文件;
其中,所述工作区中的配置文件中包括原始类的类文件的路径。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
加载所述应用之前,在所述应用的类文件中设置一个premain的方法;
设置manifest文件,所述manifest文件将Premain-Class属性设置成一个类的类全名;该类拥有所述premain的方法;
生成包含所述manifest文件的jar包;
在所述应用的参数中增加-javaagent参数和jar包,执行premain的方法,并预解析在执行premain的方法时所需要的类。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
读取类文件;
根据更新后的配置修改所述类文件,并修改所述类文件的类名,以生成第一派生类。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
利用ClassFileTransformer的接口将原始类文件替换为修改后的类文件,以阻止原始类文件被加载。
8.一种实现应用热部署的装置,其特征在于,包括:加载模块、更新模块、对应模块;
所述加载模块,用于:利用与应用唯一对应的自定义类加载器加载所述应用的类文件;
所述更新模块,用于:当所述应用...
【专利技术属性】
技术研发人员:杨春建,
申请(专利权)人:北京京东尚科信息技术有限公司,北京京东世纪贸易有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。