CN113419766B - 智能更新程序逻辑的方法、装置、设备及存储介质 - Google Patents
智能更新程序逻辑的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113419766B CN113419766B CN202110823645.5A CN202110823645A CN113419766B CN 113419766 B CN113419766 B CN 113419766B CN 202110823645 A CN202110823645 A CN 202110823645A CN 113419766 B CN113419766 B CN 113419766B
- Authority
- CN
- China
- Prior art keywords
- file
- downloading
- interface
- segmented
- version
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种智能更新程序逻辑的方法、装置、设备及存储介质,方法包括:检测当前是否存在版本更新;在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载;在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化;退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。本发明可以在业务逻辑无感知的情况下替换接口实现,从而实现不停机更新,提高了用户的使用体验。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种智能更新程序逻辑的方法、装置、设备及存储介质。
背景技术
在程序运行的过程中,随着业务的变更,往往需要进行需求的更迭,反映在程序逻辑上,就是程序逻辑的变化。而运行中的程序,是将编码的逻辑固化打包后的可执行文件。如果需要升级新的功能,往往需要将程序的可执行文件进行升级。而对于Java领域的WEB应用,可执行文件往往是一个单体的Jar包。在这种情况下,需要对执行文件进行升级,就必须要停止对外提供的服务,将可执行文件替换,然后重新启动。这种升级方式,称之为停机升级。显然,在停机升级期间,原来对外提供的服务就被中断,服务中断可以表现为网站无响应,或者网站显示维护中,或者404错误页面等,这导致用户的体验感很差。
发明内容
有鉴于此,本发明的目的在于提供一种智能更新程序逻辑的方法、装置、设备及存储介质,以实现在不停机的前提下实现热更新。
本发明实施例提供了一种智能更新程序逻辑的方法,其包括:
检测当前是否存在版本更新;
在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载;
在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化;
退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。
优选地,检测当前是否存在版本更新具体包括:
以心跳的形式将自身注册为一个后台运行的线程,在客户端启动后,静默开启自身;
调用version方法,获取当前接口实现的版本数字;
使用当前接口实现的版本数字作为参数,查询远端接口实现版本库;
获得查询得到的远端接口实现的最新版本号;
在实例中查询是否存在与所述最新版本号对应的下载标识;
若存在,则判断下载任务已经启动,结束流程;
若不存在,则为所述最新版本号创建下载标识,启动下载任务。
优选地,所述启动下载任务包括:
创建下载元文件,在元文件中写入整个下载任务的相关的文件信息、大小信息、分段信息、分段进度、校验信息;
根据下载元文件,执行对应的下载任务;其中,下载任务以分段文件的形式下载;
在分段文件全部下载完成后,对每一个分段文件执行完整性校验;
在完整性校验通过后,将分段文件合并为源文件。
优选地,对于每个分段文件的下载以及完整性校验,包括:
根据元文件中对该分段文件设置的偏移量和长度信息,从服务端下载对应的字节内容;
将从网络上下载的内容写入到分段文件中;
将本次写入的进度更新到元文件;
判断是否完成对应长度的内容写入;
若否,则返回初始步骤;
若是,则读取分段文件的内容,并使用分段文件的内容计算校验值;
将计算得到的校验值与元文件中的分段校验值进行对比;
若相同,则完成该分段文件的下载;
若不同,则删除分段文件,并创建新的分段文件重新下载。
优选地,将分段文件合并为源文件的步骤具体包括:
根据元文件中的大小信息,创建一个对应的磁盘文件,并且创建对应的磁盘映射文件;
将分段文件按照各自的序号读取对应的磁盘字节数据;
将分段文件的数据根据其在源文件中的偏移量和长度,写入磁盘映射文件;
在全部分段文件都写入到磁盘映射文件后,根据磁盘映射文件的内容计算校验值;
将计算的校验值与元文件中记录的校验值进行比较;
若相等,则文件校验成功,对磁盘映射文件执行磁盘同步,强制输入到磁盘中;
若不相等,则文件校验失败,删除所有的分段文件和元文件,并提示下载失败。
优选地,在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化,具体包括:
生成入参为类的全限定名;
以当前ClassLoader实例为加锁对象,进行加锁;
使用全限定名判断在当前的限定名与Class文件中是否存在映射;
若存在,则获取当前限定名映射的Class文件对象;
解锁ClassLoader实例,返回所述Class文件对象;
若不存在,则按照初始化的路径,读取磁盘上jar包二进制,并在内存中按照ZIP方式读取其中的元素;
判断元素的名称是否与全限定名一致;
若不一致,则查询下一元素;
若一致,则从ZIP文件中读取对应文件的字节数据,并将自己数据和全限定名作为参数,调用defineClass本地方法,将字节数据转化为JVM中的Class文件后,跳转步骤:解锁ClassLoader实例,返回所述Class文件对象。
优选地,退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用,具体包括:
将旧接口实例添加到待停止列表中;
将新接口实现赋予接口持有实例变量;
遍历待停止列表;
取出待停止列表中的每一个元素,执行其cleanResource方法,以释放旧接口实例对象申请的资源。
本发明实施例还提供了一种智能更新程序逻辑的装置,其包括:
更新检测单元,用于检测当前是否存在版本更新;
下载单元,用于在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载;
新接口实例化单元,用于在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化;
新接口启用单元,用于退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。
本发明实施例还提供了一种智能更新程序逻辑的设备,其包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的智能更新程序逻辑的方法。
本发明实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的智能更新程序逻辑的方法。
综上所述,本实施例的智能更新程序逻辑的方法,其具有如下优点:
1、通过热更新隔离层分开业务逻辑和接口定义,使得热更新隔离层可以在业务逻辑无感知的情况下替换接口实现。
2.通过版本号比对的方式,实现远端新的实现文件的下载。
3.在本地通过ClassLoader加载下载后的Jar包,实现新的接口实现实例的动态生成。
4.通过在隔离层实现旧接口与新接口的替换,从而实现新的业务逻辑的生效。
附图说明
为了更清楚地说明本发明实施方式的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本发明第一实施例提供的智能更新程序逻辑的方法的流程示意图。
图2是智能更新设备的客户端的逻辑示意图。
图3是版本更新检测的流程示意图。
图4是启动下载任务的流程示意图。
图5是对分段文件下载以及校验的流程示意图。
图6是分段文件的合并和校验的流程示意图。
图7是新旧接口替换的流程示意图。
图8是本发明第二实施例提供的智能更新程序逻辑的装置的结构示意图。
具体实施方式
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
请参阅图1,本发明第一实施例提供了一种智能更新程序逻辑的方法,其可由智能更新程序逻辑的设备(以下检测智能更新设备)来执行,特别的,由所述智能更新设备内的一个或者多个处理器来执行,以实现如下步骤:
S101,检测当前是否存在版本更新。
在本实施例中,所述智能更新设备可为台式电脑、笔记本电脑、平板电脑或者智能手机等终端设备,其中,特别的,所述智能更新设备内安装有应用程序,例如WEB应用。
在本实施例中,在使用过程中,随着业务的变更以及需求的更迭,有时需要对WEB应用进行版本的更新。
其中,如图2所示,在本实施例中,所述WEB应用在业务调用层和接口实现层之间增加了一热更新隔离层来实现不停机的热更新。
其中:
业务调用层10,该层次即是需要使用热更新隔离层的上层业务逻辑。也就是原本客户端逻辑的一部分。
热更新隔离层20,该层次是实现客户端热更新的核心层次。该层次完成了客户端热更新的职责,包含有资源的管理、版本的更新检测、热更新资源加载替换等。
接口实现层30,该层次即是原本的供上层业务调用的接口实现逻辑。
从三层架构的定位职责可以看到,业务调用层10和接口实现层30是原本客户端中就存在的东西。当二者直接结合的时候,客户端(即WEB应用)就是原本的运行模式,也就是需要停机才能完成接口实现层的更新。当有了热更新隔离层在中间作为媒介后,最重要的就是实现了在客户端的运行期,无重启情况下,对接口实现层的更新。
热更新隔离层20是实现客户端不停机更新的关键。对于Java体系而言,要能实现同一个功能的替换,显然是接口+实现的模式是最为接近。上层业务调用者持有接口,支撑方提供实现,整个业务就可以运转起来。而提供了不同的实现,就是提供了不同的功能。通过接口+实现的方式,上层业务调用者就不需要关心实现的具体细节,从而也就无法发现实现存在被替换的可能。在一般的客户端中,接口与实现往往是事先提供,静态绑定的。因此只能停机后,来更新实现。为了能实现运行期对实现进行更新,显然需要有一个代理的层次,该层次屏蔽了业务调用和接口实现。并且其代理的特性,本身就继承了对应的接口。因此对于业务调用来看,该代理层次的职责和实际的接口实现层是一模一样的。该代理层次与业务调用是静态绑定的,但是代理层次内部就可以持有多个接口实现,通过更换实际使用的接口实现,就能完成客户端运行期热更新的目的。
从原理上清晰之后,要能实现热更新,需要实现几个关键的功能:
1.新版本接口实现的远端检测
2.新版本接口实现的字节码下载
3.对字节码实现加载为Class对象,并且实例化为可调用的接口实例
4.退出原有的接口实现后,将其申请的资源进行关闭
以下分别对其进行详细的描述。
在本实施例中,首先,智能更新设备在启动WEB应用时,需要检测当前是否存在版本更新。
具体地,版本更新检测的过程如图3所示:
以心跳的形式将自身注册为一个后台运行的线程,在客户端启动后,静默开启自身。
调用version方法,获取当前接口实现的版本数字。
其中,version方法返回的是版本号的数字计算结果,方便使用自然数进行对比,容易于计算版本差异。
使用当前接口实现的版本数字作为参数,查询远端接口实现版本库。
获得查询得到的远端接口实现的最新版本号。
其中,具体地,所述智能更新设备会以固定心跳频率请求中央库,查询服务器上是否有最新的版本。
在实例中查询是否存在与所述最新版本号对应的下载标识;
若存在,则判断下载任务已经启动,结束流程;
若不存在,则为所述最新版本号创建下载标识,启动下载任务。
需要说明的是,版本检测和下载任务是独立进行的。当检测到需要更新后,下载逻辑不会马上启动。另外要避免在下载工作期间,版本检测反复的生成对应的版本更新任务,这可以通过创建下载任务采用同步方式,并且在创建任务之前,先创建任务标识位,来进行防重判断。
S102,在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载。
优选地,如图4所示,步骤S102具体包括:
创建下载元文件,在元文件中写入整个下载任务的相关的文件信息、大小信息、分段信息、分段进度、校验信息。
其中,新的接口实现往往可能伴随着新的依赖。包含着依赖的整体实现在体积上比较大。为了避免长时间持续下载对客户端网络造成的压力,以及避免网络问题造成下载中断后需要重新下载的问题,需要将整个文件进行分段。将文件分段后可以支持每一段的单独下载,不同段的并发下载。在与元文件数据配合的情况下,还可以支持断点续传。
在本实施例中,元文件存储了整个下载任务的相关信息,涵盖有文件信息、大小信息、分段信息、分段进度、校验信息等。其数据模式如表1所示:
表1
序号 | 类型 | 长度 | 内容 |
1 | int | 4 | 序号2的字节长度 |
2 | String | 不定长 | 文件名 |
3 | int | 4 | 文件大小 |
4 | byte[] | 16 | 文件的校验值 |
5 | byte | 1 | 分段个数 |
6~n | byte[] | (n-6)*29 | 每一个分段的信息 |
从序号6开始,就开始记录分段信息。分段信息的数据格式如表2所示:
表2
序号 | 类型 | 长度 | 内容 |
1 | byte | 1 | 分段序号,从0开始 |
2 | byte[] | 16 | 分段的校验值 |
3 | int | 4 | 分段的大小 |
4 | int | 4 | 分段在源文件中的偏移量 |
5 | int | 4 | 分段当前已经下载成功的长度 |
根据下载元文件,执行对应的下载任务;其中,下载任务以分段文件的形式下载;
在分段文件全部下载完成后,对每一个分段文件执行完整性校验。
其中,如图5所示,对于分段文件自身的下载以及校验流程,具体如下:
根据元文件中对该分段文件设置的偏移量和长度信息,从服务端下载对应的字节内容;
将从网络上下载的内容写入到分段文件中。
将本次写入的进度更新到元文件。
判断是否完成对应长度的内容写入。
若否,则返回初始步骤。
若是,则读取分段文件的内容,并使用分段文件的内容计算校验值。
其中,所述校验值例如可以设定为MD5值,当然也可以是其他的校验值,本发明不做具体限定。
将计算得到的校验值与元文件中的分段校验值进行对比。
若相同,则完成该分段文件的下载。
若不同,则删除分段文件,并创建新的分段文件重新下载。
在完整性校验通过后,将分段文件合并为源文件。
在本实施例中,在文件下载的过程中,本身就会执行分段文件自身的校验工作。因此在分段文件合并的时候,就不需要对分段进行在进行校验。只需要根据元文件信息,按照对应序号,将分段文件合并为源文件。
合并完成后,依据元文件中的校验值,对文件进行完整性和正确性校验。在通过之后,整个下载过程完成。此时可以删除掉元文件和分段文件。
其中,分段文件的合并和校验流程如图6所示:
根据元文件中的大小信息,创建一个对应的磁盘文件,并且创建对应的磁盘映射文件;
将分段文件按照各自的序号读取对应的磁盘字节数据;
将分段文件的数据根据其在源文件中的偏移量和长度,写入磁盘映射文件;
在全部分段文件都写入到磁盘映射文件后,根据磁盘映射文件的内容计算校验值;
将计算的校验值与元文件中记录的校验值进行比较;
若相等,则文件校验成功,对磁盘映射文件执行磁盘同步,强制输入到磁盘中;
若不相等,则文件校验失败,删除所有的分段文件和元文件,并提示下载失败。
S103,在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化。
在本实施例中,在源文件成功下载完成后,就可以使用加载器来进行接口实现类的加载工作。接口实现,往往有着自己的依赖。而为了保证这些依赖不会同客户端已经存在的依赖冲突,因此需要自定义类加载器,打破默认加载器的双亲依赖模式,即相关的依赖优先从该源文件的Jar包中寻找。只有在寻找不到的时候,才可以寻求客户端中已经存在的依赖。
具体实现流程如图7所示:
生成入参为类的全限定名;
以当前ClassLoader实例为加锁对象,进行加锁;
使用全限定名判断在当前的限定名与Class文件中是否存在映射;
若存在,则获取当前限定名映射的Class文件对象;
解锁ClassLoader实例,返回所述Class文件对象;
若不存在,则按照初始化的路径,读取磁盘上jar包二进制,并在内存中按照ZIP方式读取其中的元素;
判断元素的名称是否与全限定名一致;
若不一致,则查询下一元素;
若一致,则从ZIP文件中读取对应文件的字节数据,并将自己数据和全限定名作为参数,调用defineClass本地方法,将字节数据转化为JVM中的Class文件后,跳转步骤:解锁ClassLoader实例,返回所述Class文件对象。
本实施例中,基于上述的步骤,可以避免新版本引入的依赖和客户端上的冲突,也就能避免因为依赖冲突而导致的接口实例化失败的问题。Class对象成功加载完成后,对象的实例化就变得很容易。只需要调用对应Class对象的newInstance方法即可。这样就完成了新的接口对象的实例化。
S104,退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。
在上面的流程中,已经完成了新接口实现对象的实例化。那么下一步就是完成替换。由于接口在使用的过程中,可能会存在申请资源的情况。因此接口应该继承如下的接口定义,用于在被替换的情况,关闭掉自己申请的资源。
interface ShutdownSupport{
void cleanResource();
}
当该接口被调用时,意味着此时该接口实现对象已经不再被使用,自然其申请的相关资源也应该被释放。那么通过调用cleanResource方法来通知接口实现内的相关资源,执行对应的退出逻辑。
只有新接口实现被替换完成后,旧接口实现才可以执行关闭操作。来避免可能的并发冲突。
整体上启用新接口的流程如下:
将旧接口实例添加到待停止列表中;
将新接口实现赋予接口持有实例变量;
遍历待停止列表;
取出待停止列表中的每一个元素,执行其cleanResource方法,以释放旧接口实例对象申请的资源。
综上所述,本实施例的智能更新程序逻辑的方法,其具有如下优点:
1、通过热更新隔离层分开业务逻辑和接口定义,使得热更新隔离层可以在业务逻辑无感知的情况下替换接口实现。
2.通过版本号比对的方式,实现远端新的实现文件的下载。
3.在本地通过ClassLoader加载下载后的Jar包,实现新的接口实现实例的动态生成。
4.通过在隔离层实现旧接口与新接口的替换,从而实现新的业务逻辑的生效。
请参阅图8,本发明第二实施例还提供了一种智能更新程序逻辑的装置,其包括:
更新检测单元210,用于检测当前是否存在版本更新;
下载单元220,用于在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载;
新接口实例化单元230,用于在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化;
新接口启用单元240,用于退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。
本发明第三实施例还提供了一种智能更新程序逻辑的设备,其包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的智能更新程序逻辑的方法。
本发明第四实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的智能更新程序逻辑的方法。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种智能更新程序逻辑的方法,其特征在于,包括:
检测当前是否存在版本更新;
在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载;
在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化;其中,具体包括:生成入参为类的全限定名;以当前ClassLoader实例为加锁对象,进行加锁;使用全限定名判断在当前的限定名与Class文件中是否存在映射;若存在,则获取当前限定名映射的Class文件对象;解锁ClassLoader实例,返回所述Class文件对象;若不存在,则按照初始化的路径,读取磁盘上jar包二进制,并在内存中按照ZIP方式读取其中的元素;判断元素的名称是否与全限定名一致;若不一致,则查询下一元素;若一致,则从ZIP文件中读取对应文件的字节数据,并将自己数据和全限定名作为参数,调用defineClass本地方法,将字节数据转化为JVM中的Class文件后,跳转至步骤:解锁ClassLoader实例,返回所述Class文件对象;
退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。
2.根据权利要求1所述的智能更新程序逻辑的方法,其特征在于,检测当前是否存在版本更新具体包括:
以心跳的形式将自身注册为一个后台运行的线程,在客户端启动后,静默开启自身;
调用version方法,获取当前接口实现的版本数字;
使用当前接口实现的版本数字作为参数,查询远端接口实现版本库;
获得查询得到的远端接口实现的最新版本号;
在实例中查询是否存在与所述最新版本号对应的下载标识;
若存在,则判断下载任务已经启动,结束流程;
若不存在,则为所述最新版本号创建下载标识,启动下载任务。
3.根据权利要求2所述的智能更新程序逻辑的方法,其特征在于,所述启动下载任务包括:
创建下载元文件,在元文件中写入整个下载任务的相关的文件信息、大小信息、分段信息、分段进度、校验信息;
根据下载元文件,执行对应的下载任务;其中,下载任务以分段文件的形式下载;
在分段文件全部下载完成后,对每一个分段文件执行完整性校验;
在完整性校验通过后,将分段文件合并为源文件。
4.根据权利要求3所述的智能更新程序逻辑的方法,其特征在于,对于每个分段文件的下载以及完整性校验,包括:
根据元文件中对该分段文件设置的偏移量和长度信息,从服务端下载对应的字节内容;
将从网络上下载的内容写入到分段文件中;
将本次写入的进度更新到元文件;
判断是否完成对应长度的内容写入;
若否,则返回初始步骤;
若是,则读取分段文件的内容,并使用分段文件的内容计算校验值;
将计算得到的校验值与元文件中的分段校验值进行对比;
若相同,则完成该分段文件的下载;
若不同,则删除分段文件,并创建新的分段文件重新下载。
5.根据权利要求4所述的智能更新程序逻辑的方法,其特征在于,将分段文件合并为源文件的步骤具体包括:
根据元文件中的大小信息,创建一个对应的磁盘文件,并且创建对应的磁盘映射文件;
将分段文件按照各自的序号读取对应的磁盘字节数据;
将分段文件的数据根据其在源文件中的偏移量和长度,写入磁盘映射文件;
在全部分段文件都写入到磁盘映射文件后,根据磁盘映射文件的内容计算校验值;
将计算的校验值与元文件中记录的校验值进行比较;
若相等,则文件校验成功,对磁盘映射文件执行磁盘同步,强制输入到磁盘中;
若不相等,则文件校验失败,删除所有的分段文件和元文件,并提示下载失败。
6.根据权利要求1所述的智能更新程序逻辑的方法,其特征在于,退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用,具体包括:
将旧接口实例添加到待停止列表中;
将新接口实现赋予接口持有实例变量;
遍历待停止列表;
取出待停止列表中的每一个元素,执行其cleanResource方法,以释放旧接口实例对象申请的资源。
7.一种智能更新程序逻辑的装置,其特征在于,包括:
更新检测单元,用于检测当前是否存在版本更新;
下载单元,用于在检测到有新版本后,创建一个下载与校验任务,以实现新版本的源文件下载;
新接口实例化单元,用于在下载完成源文件后,根据自定义类加载器,优先从该源文件的Jar包中寻找相关依赖,以完成新接口实现对象的实例化;其中,新接口实例化单元具体用于:生成入参为类的全限定名;以当前ClassLoader实例为加锁对象,进行加锁;使用全限定名判断在当前的限定名与Class文件中是否存在映射;若存在,则获取当前限定名映射的Class文件对象;解锁ClassLoader实例,返回所述Class文件对象;若不存在,则按照初始化的路径,读取磁盘上jar包二进制,并在内存中按照ZIP方式读取其中的元素;判断元素的名称是否与全限定名一致;若不一致,则查询下一元素;若一致,则从ZIP文件中读取对应文件的字节数据,并将自己数据和全限定名作为参数,调用defineClass本地方法,将字节数据转化为JVM中的Class文件后,跳转至步骤:解锁ClassLoader实例,返回所述Class文件对象;
新接口启用单元,用于退出原有的供上层业务调用的旧接口,启用新接口供上层业务调用。
8.一种智能更新程序逻辑的设备,其特征在于,包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如权利要求1至6任意一项所述的智能更新程序逻辑的方法。
9.一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如权利要求1至6任意一项所述的智能更新程序逻辑的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110823645.5A CN113419766B (zh) | 2021-07-21 | 2021-07-21 | 智能更新程序逻辑的方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110823645.5A CN113419766B (zh) | 2021-07-21 | 2021-07-21 | 智能更新程序逻辑的方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419766A CN113419766A (zh) | 2021-09-21 |
CN113419766B true CN113419766B (zh) | 2023-07-21 |
Family
ID=77721527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110823645.5A Active CN113419766B (zh) | 2021-07-21 | 2021-07-21 | 智能更新程序逻辑的方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419766B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114466026B (zh) * | 2022-01-05 | 2024-05-14 | 杭州网易云音乐科技有限公司 | 应用程序接口的更新方法、装置、存储介质和计算设备 |
CN115857997A (zh) * | 2022-11-30 | 2023-03-28 | 广州市玄武无线科技股份有限公司 | Electron桌面应用版本更新方法、装置、终端设备及存储介质 |
CN116400945B (zh) * | 2023-06-08 | 2023-10-27 | 中航信移动科技有限公司 | 一种动态链接库升级方法、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108228208A (zh) * | 2016-12-22 | 2018-06-29 | 北京神州泰岳软件股份有限公司 | 一种java应用程序的动态更新方法和装置 |
CN108897562A (zh) * | 2018-06-27 | 2018-11-27 | 腾讯科技(深圳)有限公司 | 安装包更新方法、装置、介质以及设备 |
CN109032936A (zh) * | 2018-07-13 | 2018-12-18 | 陈希 | 一种桌面自动化测试开发方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013514569A (ja) * | 2009-12-18 | 2013-04-25 | シダンスク ユニバーシティ | 静的に型付けされたクラスベースのオブジェクト指向ソフトウェアのノンブロッキング動的更新の方法、コンピュータ・プログラム製品、およびシステム |
-
2021
- 2021-07-21 CN CN202110823645.5A patent/CN113419766B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108228208A (zh) * | 2016-12-22 | 2018-06-29 | 北京神州泰岳软件股份有限公司 | 一种java应用程序的动态更新方法和装置 |
CN108897562A (zh) * | 2018-06-27 | 2018-11-27 | 腾讯科技(深圳)有限公司 | 安装包更新方法、装置、介质以及设备 |
CN109032936A (zh) * | 2018-07-13 | 2018-12-18 | 陈希 | 一种桌面自动化测试开发方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113419766A (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113419766B (zh) | 智能更新程序逻辑的方法、装置、设备及存储介质 | |
US7039923B2 (en) | Class dependency graph-based class loading and reloading | |
US9621634B2 (en) | Dependency management with atomic decay | |
CN104793946B (zh) | 基于云计算平台的应用部署方法和系统 | |
US8375382B2 (en) | Enabling parallel websphere runtime versions | |
US20060020937A1 (en) | System and method for extraction and creation of application meta-information within a software application repository | |
US7131122B1 (en) | Apparatus, system and method for detecting old version of an applet in a client brower's JVM | |
US8181166B2 (en) | System and method for determining when an EJB compiler needs to be executed | |
CN109491695A (zh) | 一种集成安卓应用的增量更新方法 | |
US20030191870A1 (en) | Method and apparatus for updating software libraries | |
US20100153153A1 (en) | Stable Linking And Patchability Of Business Processes Through Hierarchical Versioning | |
US11880674B2 (en) | Adaptive hot reload for class changes | |
US9658845B2 (en) | Generating a where-used objects list for updating data | |
US9411618B2 (en) | Metadata-based class loading using a content repository | |
US20050114644A1 (en) | Deterministic system and method for implementing software distributed between a desktop and a remote device | |
US20050108704A1 (en) | Software distribution application supporting verification of external installation programs | |
CN113515303B (zh) | 一种项目转型方法、装置和设备 | |
JP2000357082A (ja) | 企業環境において展開記述子を実施するための方法と装置 | |
US10540397B2 (en) | Algorithm to check compatibility of business object types to prevent business catalog corruption on resource update | |
US10558450B2 (en) | Mechanism for customizing multiple computing devices | |
US9389851B1 (en) | System and method for providing consistency between software library repositories | |
JP2003330719A (ja) | アプリケーションのバージョン/リリースコントロール方法及びシステム、クライアントpcにインストールするアプリケーションのバージョン/リリースコントロールを行なうためのコンピュータソフトウエアプログラム | |
CN116089387A (zh) | 资源配置方法、装置、电子设备、可读介质和程序产品 | |
CN116382726A (zh) | 一种资源更新方法、系统、电子设备及存储介质 | |
CN115509636A (zh) | 一种h5应用离线加速方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 361000 one of 504, No. 18, guanri Road, phase II, software park, Xiamen, Fujian Applicant after: XIAMEN YILIANZHONG YIHUI TECHNOLOGY CO.,LTD. Address before: Room 504, No.18, guanri Road, phase II, software park, Xiamen City, Fujian Province, 361000 Applicant before: XIAMEN YILIANZHONG YIHUI TECHNOLOGY CO.,LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |