应用程序的热修复方法、系统、设备及可读存储介质技术方案

技术编号:35484941 阅读:24 留言:0更新日期:2022-11-05 16:37
本申请公开了一种应用程序的热修复方法、系统、设备及可读存储介质。所述应用程序的热修复方法包括:终端获取到待修复应用程序的补丁包,所述补丁包中包括有所述待修复应用程序对应的目标应用程序子类的类文件;利用类加载器加载所述目标应用程序子类的类文件;将所述目标应用程序子类注册为所述待修复应用程序对应的类标识符所对应的对象。上述方案,避免了待修复类未实现某一声明接口的场景,减少因为后续对修复逻辑或方法的调用而引发的各种框架中引用处理的复杂性。框架中引用处理的复杂性。框架中引用处理的复杂性。

【技术实现步骤摘要】
应用程序的热修复方法、系统、设备及可读存储介质


[0001]本申请涉及计算机
,特别是涉及一种应用程序的热修复方法、系统、设备及可读存储介质。

技术介绍

[0002]生产环境线上问题(bug)的解决一直是系统研发、运维人员头疼的一个问题,有的行业对应用很敏感,比如金融行业,游戏服务,可能一个月或者更长时间不能停止服务提供或者因为管控无法重新发布版本,但谁也无法保证线上的逻辑百分百没有问题,这就需要在不停止服务的情况下在线修复bug,以实现提供服务的连续性和稳定性。
[0003]业内现有的在线修复bug的技术方式主要有两种:一种是使用javaAgent技术(依附于java应用程序并能对其字节码做相关更改的一项技术),利用instrument工具相关api接口直接在运行时重载需要修复的类,该种方式的缺陷在于,无法新增一个原来不存在的依赖类,修复类和待修复类的实现接口数、接口类型、方法访问符、字段数、方法签名都必须完全一致;另一种是通过重新加载原有类的修复类,该种方式的不足在于,待修复类和修复类必须为某同一声明接口的实现类,否则在重新加载修复类后,其原类型无法接收新加载的修复类,因为此时JVM(Java虚拟机)认为修复前后已非同一个类,故此时进行修复方法的重新调用时,需结合反射等方式处理,在各种框架中实现复杂度升高,而待修复类未实现某一声明接口的情况在现有工程代码中较普遍。

技术实现思路

[0004]本申请主要解决的技术问题是提供一种应用程序的热修复方法、系统、设备及可读存储介质,能够避免待修复类未实现某一声明接口的场景,减少因为后续对修复逻辑或方法的调用而引发的各种框架中引用处理的复杂性。
[0005]为了解决上述问题,本申请第一方面提供了一种应用程序的热修复方法,所述应用程序的热修复方法包括:终端获取到待修复应用程序的补丁包,所述补丁包中包括有所述待修复应用程序对应的目标应用程序子类的类文件;利用类加载器加载所述目标应用程序子类的类文件;将所述目标应用程序子类注册为所述待修复应用程序对应的类标识符所对应的对象。
[0006]其中,所述利用类加载器加载所述目标应用程序子类的类文件,包括:通过所述类加载器将所述目标应用程序子类的类文件加载到JVM中。
[0007]其中,所述将所述目标应用程序子类注册为所述待修复应用程序对应的类标识符所对应的对象,包括:将所述目标应用程序子类注册至spring容器,并将所述spring容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类。
[0008]其中,所述待修复应用程序为Controller类或Mapper类;所述将所述目标应用程序子类注册至spring容器,并将所述spring容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类,包括:将所述目标应用程序子类注册至所述
spring容器的子容器中;将所述子容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类。
[0009]其中,所述待修复应用程序为Controller类;所述将所述子容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类,包括:将所述目标应用程序子类注册在RequestMappingInfoHandlerMapping中,所述RequestMappingInfoHandlerMapping中记录有所述目标应用程序子类与所述待修复应用程序对应的类标识符之间的映射关系。
[0010]其中,所述待修复应用程序为Mapper类;所述将所述子容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类,包括:将所述目标应用程序子类注册在Configuration中,所述Configuration中记录有所述目标应用程序子类与所述待修复应用程序对应的类标识符之间的映射关系。
[0011]为了解决上述问题,本申请第二方面提供了一种应用程序的热修复系统,所述应用程序的热修复系统包括若干个终端和与每个所述终端连接的分布式修复平台;所述分布式修复平台用于获取待修复应用程序对应的目标应用程序子类的类文件,并将所述目标应用程序子类的类文件分发至每个所述终端;所述终端用于获取所述目标应用程序子类的类文件,并利用上述第一方面的应用程序的热修复方法,对所述待修复应用程序进行热修复。
[0012]其中,所述分布式修复平台包括相互连接的文件获取单元、安全校验单元、存储单元和通信电路;所述文件获取单元用于根据所述待修复应用程序的类标识符自动拉取所述待修复应用程序对应的所述目标应用程序子类的类文件;所述安全校验单元用于对所述目标应用程序子类的类文件进行安全机制校验;所述存储单元用于在安全机制校验通过后,存储所述目标应用程序子类的类文件;所述通信电路用于将所述目标应用程序子类的类文件分发至每个所述终端。
[0013]为解决上述问题,本申请第三方面提供了一种电子设备,所述电子设备包括相互连接的处理器和存储器;所述存储器用于存储程序指令,所述处理器用于执行所述程序指令以实现上述第一方面的应用程序的热修复方法。
[0014]为解决上述问题,本申请第四方面提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令被处理器执行时实现上述第一方面的应用程序的热修复方法。
[0015]本专利技术的有益效果是:区别于现有技术的情况,本申请的应用程序的热修复方法中,终端通过获取待修复应用程序的补丁包,补丁包中包括有待修复应用程序对应的目标应用程序子类的类文件,然后利用类加载器加载目标应用程序子类的类文件,并将目标应用程序子类注册为待修复应用程序对应的类标识符所对应的对象。通过利用类加载器加载待修复应用程序对应的目标应用程序子类的类文件,即实现一个待修复类的子类,于是在待修复类的子类上对需要修复的逻辑或方法进行调整,然后再次加载,由于将待修复应用程序对应的类标识符所对应的对象替换成了目标应用程序子类,所以可以通过原来的待修复类作为桥梁来接受修复后的对象,方便的完成修复后的对象的方法或逻辑的调用,这样就避免了待修复类未实现某一声明接口的场景,减少因为后续对修复方法的调用而引发的各种框架中引用处理的复杂性。
附图说明
[0016]图1是本申请应用程序的热修复方法一实施例的流程示意图;
[0017]图2是本申请应用程序的热修复系统一实施例的结构示意图;
[0018]图3是图2的应用程序的热修复系统中分布式修复平台一实施例的结构示意图;
[0019]图4是本申请一应用场景中应用程序的热修复系统的工作流程示意图;
[0020]图5是本申请电子设备一实施例的结构示意图;
[0021]图6是本申请计算机可读存储介质一实施例的结构示意图。
具体实施方式
[0022]下面结合说明书附图,对本申请实施例的方案进行详细说明。
[0023]以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用程序的热修复方法,其特征在于,所述应用程序的热修复方法包括:终端获取到待修复应用程序的补丁包,所述补丁包中包括有所述待修复应用程序对应的目标应用程序子类的类文件;利用类加载器加载所述目标应用程序子类的类文件;将所述目标应用程序子类注册为所述待修复应用程序对应的类标识符所对应的对象。2.根据权利要求1所述的应用程序的热修复方法,其特征在于,所述利用类加载器加载所述目标应用程序子类的类文件,包括:通过所述类加载器将所述目标应用程序子类的类文件加载到JVM中。3.根据权利要求1所述的应用程序的热修复方法,其特征在于,所述将所述目标应用程序子类注册为所述待修复应用程序对应的类标识符所对应的对象,包括:将所述目标应用程序子类注册至spring容器,并将所述spring容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类。4.根据权利要求3所述的应用程序的热修复方法,其特征在于,所述待修复应用程序为Controller类或Mapper类;所述将所述目标应用程序子类注册至spring容器,并将所述spring容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类,包括:将所述目标应用程序子类注册至所述spring容器的子容器中;将所述子容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类。5.根据权利要求4所述的应用程序的热修复方法,其特征在于,所述待修复应用程序为Controller类;所述将所述子容器中的所述待修复应用程序对应的类标识符所对应的对象替换为所述目标应用程序子类,包括:将所述目标应用程序子类注册在RequestMappingInfoHandlerMapping中,所述RequestMappingInfoHandlerMapping中记录有所述目标应用程序子类与所述待修复应用程序对应的类标识符之间...

【专利技术属性】
技术研发人员:杨博研
申请(专利权)人:平安银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1