CN112199110B - 一种免重启运维升级方法、系统、装置和介质 - Google Patents

一种免重启运维升级方法、系统、装置和介质 Download PDF

Info

Publication number
CN112199110B
CN112199110B CN202011110064.9A CN202011110064A CN112199110B CN 112199110 B CN112199110 B CN 112199110B CN 202011110064 A CN202011110064 A CN 202011110064A CN 112199110 B CN112199110 B CN 112199110B
Authority
CN
China
Prior art keywords
service logic
executable code
logic file
access request
compiling
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
Application number
CN202011110064.9A
Other languages
English (en)
Other versions
CN112199110A (zh
Inventor
贾天军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Ruicheng Software Co ltd
Original Assignee
Shanghai Ruicheng Software Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Ruicheng Software Co ltd filed Critical Shanghai Ruicheng Software Co ltd
Priority to CN202011110064.9A priority Critical patent/CN112199110B/zh
Publication of CN112199110A publication Critical patent/CN112199110A/zh
Application granted granted Critical
Publication of CN112199110B publication Critical patent/CN112199110B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种免重启运维升级系统、方法、装置和介质,包括:请求接收模块,用于接收访问请求;文件获取模块,用于查找并获取访问请求对应的业务逻辑文件;运行缓存模块,用于存储访问请求对应的第一可执行代码;更新判断模块,用于判断是否需要使用访问请求对应的业务逻辑文件更新第一可执行代码;编译模块,用于当需要使用访问请求对应的业务逻辑文件更新第一可执行代码,编译业务逻辑文件,生成第二可执行代码并令第一可执行代码更新为第二可执行代码。本发明的效果:可以再不停止服务的前提下,对web项目更新升级。

Description

一种免重启运维升级方法、系统、装置和介质
技术领域
本发明涉及网站运维领域,特别涉及一种免重启运维升级方法、系统、装置和介质。
背景技术
在传统的JAVA开发过程中,一般采用静态编译的方式进行,具体而言,首先使用JAVA编译器对java源代码进行编译,从而生成字节码,具体到文件,也就是对应的Class文件,然后JAVA虚拟机根据CLASS文件的内容,生成对应的二进制执行码,从而进行执行。
但是在Web开发的过程中,由于在运行过程中必须在启动的同时将Class文件,也就是字节码载入内存中,导致在升级的时候,必须让服务器停止服务,才能实现代码升级,在重新启动之后才能将新的代码注入到内存中进行使用。
故市场亟需一种可以基于JAVAWEB的,实现免重启运维升级的技术方案。
发明内容
为解决在Web开发的过程中,由于在运行过程中必须在启动的同时将Class文件,也就是字节码载入内存中,导致在升级的时候,必须让服务器停止服务,才能实现代码升级,在重新启动之后才能将新的代码注入到内存中进行使用,本发明提供一种免重启运维升级方法、系统、装置和介质,具体的技术方案如下:
一方面,本发明提供一种免重启运维升级系统,包括:
请求接收模块,用于接收访问请求;
文件获取模块,用于查找并获取所述访问请求对应的业务逻辑文件;
运行缓存模块,用于存储所述访问请求对应的第一可执行代码;
更新判断模块,用于判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码;
编译模块,用于当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,编译所述业务逻辑文件,生成所述第二可执行代码并令所述第一可执行代码更新为所述第二可执行代码。
在本实施例中,通过在被请求调用业务逻辑文件的时候,根据需求动态的编译对应的业务逻辑文件,然后将生成的可执行代码载入到内存当中,克服了传统的JAVAWEB升级部署过程中需要重启动后才可以生效的问题,也就是说在实际的运行过程中,可以再不停止服务的前提下,对源代码进行debug和更新升级,如增加业务逻辑等,同时,用户并不会因为升级而导致服务停止或者是数据丢失。
优选地,所述编译模块具体包括:
源代码读取子模块,用于读取所述业务逻辑文件;
JAVA动态编译子模块,用于动态编译所述业务逻辑文件的源代码,生成第二可执行代码。
在本优选的技术方案中,相对于静态编译,动态编译能够更快的得到可执行代码进而部署到内存中进行运行,从而提高了系统的运行效率。
优选地,还包括静态编译模块,所述静态编译模块包括:
静态代码读取子模块,用于读取所述业务逻辑文件;
字节码生成子模块,用于根据所述业务逻辑文件生成JAVA字节码;
字节码解释子模块,用于根据所述JAVA字节码生成所述第一可执行代码。
在本优选的技术方案中,通过同时采用动态编译、静态编译,在提高了运行灵活性的同时,兼顾了运行速度,避免因纯粹的动态编译而导致的运行效率低下。
优选地,所述更新判断模块包括版本判断模块,用于比较所述业务逻辑文件的版本号和所述第一可执行代码的版本号,若所述业务逻辑文件的版本号高于所述第一可执行代码的版本号,则需要更新。
在本优选的技术方案中,只有当需要进行编译的时候,具有编译权限的角色才能访问业务逻辑文件,从而一方面提高业务逻辑文件的安全性,另一方面通过增加业务逻辑文件的调用限制,也减少因错误的访问而给服务器带来不必要的风险,譬如由非具有编译权限的程序错误编译所带来的不可预测的后果。
另一方面,本发明提供一种免重启运维升级方法,包括:
接收访问请求;
根据所述访问请求获取所述访问请求对应的业务逻辑文件;
判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码,当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,编译所述业务逻辑文件,生成所述第二可执行代码并令所述第一可执行代码更新为所述第二可执行代码。
优选地,所述编译所述业务逻辑文件包括:
读取所述业务逻辑文件;
动态编译所述业务逻辑文件的源代码,生成第二可执行代码。
优选地,还包括:
读取所述业务逻辑文件;
根据所述业务逻辑文件生成JAVA字节码;
根据所述JAVA字节码生成所述第一可执行代码。
优选地,所述判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码包括:
比较所述业务逻辑文件的版本号和所述第一可执行代码的版本号,若所述业务逻辑文件的版本号高于所述第一可执行代码的版本号,则需要更新。
另一方面,本发明提供一种免重启运维升级装置,包括存储器和处理器以及存储在所述存储器上的计算机程序;
所述计算机程序被配置为由处理器调用时,实现所述的一种免重启运维升级方法。
另一方面,本发明提供一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被配置为由处理器调用时,实现所述的一种免重启运维升级方法的步骤。
本发明至少包括以下一项技术效果:
(1)通过在被请求调用业务逻辑文件的时候,根据需求动态的编译对应的业务逻辑文件,然后将生成的可执行代码载入到内存当中,克服了传统的JAVAWEB升级部署过程中需要重启动后才可以生效的问题,也就是说在实际的运行过程中,可以再不停止服务的前提下,对源代码进行debug和更新升级,如增加业务逻辑等,同时,用户并不会因为升级而导致服务停止或者是数据丢失;
(2)相对于静态编译,动态编译能够更快的得到可执行代码进而部署到内存中进行运行,从而提高了系统的运行效率;
(3)通过同时采用动态编译、静态编译,在提高了运行灵活性的同时,兼顾了运行速度,避免因纯粹的动态编译而导致的运行效率低下;
(4)通过版本号判断是否需要更新相对于其他的方式,一方面计算起来非常方便,另一方面可以很快的得出是否应当更新,因为在具体的运维过程中,可能会出现上传了错误的老版本文件的情形,而通过比较版本之间的号码关系,可以有效的保证文件的正确性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的原理示意图;
图2为本发明实施例1的结构示意图;
图3为本发明实施例5的流程示意图;
图4为本发明实施例6的流程示意图;
图5为本发明实施例7的流程示意图;
图6为本发明实施例8的流程示意图;
图7为本发明实施例9的流程示意图。
请求接收模块1;
文件获取模块2;
运行缓存模块3;
更新判断模块4;
编译模块5。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本申请。在其他情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所述描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其他特征、整体、步骤、操作、元素、组件和/或集合的存在或添加。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘出了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
另外,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
实施例1:
如图1、2所示,本实施例提供一种免重启运维升级系统,包括:
请求接收模块1,用于接收访问请求;
文件获取模块2,用于查找并获取所述访问请求对应的业务逻辑文件;
运行缓存模块3,用于存储所述访问请求对应的第一可执行代码;
更新判断模块4,用于判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码;
编译模块5,用于当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,编译所述业务逻辑文件,生成所述第二可执行代码并令所述第一可执行代码更新为所述第二可执行代码。
在本实施例中,用户向服务器发出访问请求,部署在服务器上的请求接收模块1接受到用户的访问请求后,根据访问请求所对应的URL寻找所对应的业务逻辑代码,一般而言,每一个URL都会对应一个业务逻辑文件,然后根据业务逻辑文件自带的HASH值和第一可执行代码的HASH值进行比较,或者是其他的方法,譬如二者的版本号来判断是否需要使用所述访问请求对应的业务逻辑文件更新第一可执行代码,当需要更新第一可执行代码的时候,也就是说业务逻辑文件是经过了修改的,需要将其编译生成对应的第二可执行代码以替代原有的存储在运行缓存模块3中,也就是内存中的第一可执行代码,因为其对应的是旧版的可执行代码。
在本实施例中,通过在被请求调用业务逻辑文件的时候,根据需求动态的编译对应的业务逻辑文件,然后将生成的可执行代码载入到内存当中,克服了传统的JAVAWEB升级部署过程中需要重启动后才可以生效的问题,也就是说在实际的运行过程中,可以再不停止服务的前提下,对源代码进行debug和更新升级,如增加业务逻辑等,同时,用户并不会因为升级而导致服务停止或者是数据丢失。
实施例2:
本实施例提供一种免重启运维升级系统,基于实施例1,包括:所述编译模块5具体包括:
源代码读取子模块,用于读取所述业务逻辑文件;
JAVA动态编译子模块,用于动态编译所述业务逻辑文件的源代码,生成第二可执行代码。
在本实施例中,通过使用动态编译的手段来对源代码进行编译来实现无感更新,具体而言,当需要更新第一可执行代码的时候,由源代码读取子模块读取位于文件获取模块2中的新的业务逻辑文件,然后由JAVA动态编译子模块进行动态编译,具体而言,可采用Runtime对象进行动态编译,也可通过解释器进行解释运行,同时,也可采用其他的方法,然后生成对应的第二可执行代码,然后替换到内存中进行执行。
在本实施例中,相对于静态编译,动态编译能够更快的得到可执行代码进而部署到内存中进行运行,从而提高了系统的运行效率。
实施例3:
本实施例提供一种免重启运维升级系统,基于实施例2,还包括静态编译模块,所述静态编译模块包括:
静态代码读取子模块,用于读取所述业务逻辑文件;
字节码生成子模块,用于根据所述业务逻辑文件生成JAVA字节码;
字节码解释子模块,用于根据所述JAVA字节码生成所述第一可执行代码。
在本实施例中,在一个代码运行部署之前,一般先要进行一次静态编译过程,静态编译相对于动态编译,虽然灵活性较差,但是具有较强的性能,速度比较快,同时由于一项业务在运行过程中,绝大多数的代码实际上是不会更改的,所以其灵活性实质上也具有一定的保障,然后将经过静态编译所生成的war包部署到服务器上进行运行。
同时在正式的运行过程中,存在着热点代码,也就是hotspotcode,即被多次调用的代码,在运行过程中存在一种情况,一个更新后的经过动态编译的代码,被不断的调用,虽然其一直在内存中,但是由于动态编译的代码的运行效率远低于静态编译的代码,故若发现存在热点代码的时候,便将热点代码通过即时编译的方式进行编译,从而形成经过静态编译,运行速度较快的静态可执行代码进行运行,从而兼顾了运行速度和运行灵活性。
本实施例通过同时采用动态编译、静态编译,在提高了运行灵活性的同时,兼顾了运行速度,避免因纯粹的动态编译而导致的运行效率低下。
实施例4:
本实施例提供一种免重启运维升级系统,基于实施例3,还包括:所述更新判断模块包括版本判断模块,用于比较所述业务逻辑文件的版本号和所述第一可执行代码的版本号,若所述业务逻辑文件的版本号高于所述第一可执行代码的版本号,则需要更新。
在本实施例中,判断是否需要更新具体通过版本号进行判断,相对于HASH等进行判断,通过版本号一方面计算起来非常方便,另一方面可以很快的得出是否应当更新,因为在具体的运维过程中,可能会出现上传了错误的老版本文件的情形,而通过比较版本之间的号码关系,可以有效的保证文件的正确性。
实施例5:
如图1、3所示,本实施例提供一种免重启运维升级方法,包括:
S1:接收访问请求并根据所述访问请求获取所述访问请求对应的业务逻辑文件;
S2:判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码,当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,进入S3;
S3:编译所述业务逻辑文件,生成所述第二可执行代码;
S4:令所述第一可执行代码更新为所述第二可执行代码。
在本实施例中,用户向服务器发出访问请求,部署在服务器上的请求接收模块接受到用户的访问请求后,根据访问请求所对应的URL寻找所对应的业务逻辑代码,一般而言,每一个URL都会对应一个业务逻辑文件,然后根据业务逻辑文件自带的HASH值和第一可执行代码的HASH值进行比较,或者是其他的方法来判断是否需要使用所述访问请求对应的业务逻辑文件更新第一可执行代码,当需要更新第一可执行代码的时候,也就是说业务逻辑文件是经过了修改的,需要将其编译生成对应的第二可执行代码以替代原有的存储在运行缓存模块中,也就是内存中的第一可执行代码,因为其对应的是旧版的可执行代码。
实施例6:
如图1、4所示,本实施例提供一种免重启运维升级方法,包括:
S1:接收访问请求并根据所述访问请求获取所述访问请求对应的业务逻辑文件;;
S2:判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码,当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,进入S3;
S3-1:读取所述业务逻辑文件;
S3-2:动态编译所述业务逻辑文件的源代码,生成第二可执行代码;
S4:令所述第一可执行代码更新为所述第二可执行代码。
在本实施例中,通过使用动态编译的手段来对源代码进行编译来实现无感更新,具体而言,当需要更新第一可执行代码的时候,由源代码读取子模块读取位于文件获取模块中的新的业务逻辑文件,然后由JAVA动态编译子模块进行动态编译,具体而言,可采用Runtime对象进行动态编译,同时,也可采用其他的方法,然后生成对应的第二可执行代码,然后替换到内存中进行执行。
实施例7:
如图1、5所示,本实施例提供一种免重启运维升级方法,包括:
S0-1:读取所述业务逻辑文件;
S0-2:根据所述业务逻辑文件生成JAVA字节码;
S0-3:根据所述JAVA字节码生成所述第一可执行代码;
S1:接收访问请求;
S2:判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码,当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,进入S3;
S3-1:读取所述业务逻辑文件;
S3-2:动态编译所述业务逻辑文件的源代码,生成第二可执行代码;
S4:令所述第一可执行代码更新为所述第二可执行代码。
在本实施例中,在一个代码运行部署之前,一般先要进行一次静态编译过程,静态编译相对于动态编译,虽然灵活性较差,但是具有较强的性能,速度比较快,同时由于一项业务在运行过程中,绝大多数的代码实际上是不会更改的,所以其灵活性实质上也具有一定的保障,然后将经过静态编译所生成的war包部署到服务器上进行运行。
实施例8:
如图1、6所示,本实施例提供一种免重启运维升级方法,包括:
S1:接收访问请求并根据所述访问请求获取所述访问请求对应的业务逻辑文件;;
S2:判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码,当需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码时,进入S3;
S3-1:读取所述业务逻辑文件;
S3-2:动态编译所述业务逻辑文件的源代码,生成第二可执行代码;
S4:令所述第一可执行代码更新为所述第二可执行代码;
S5-1:读取所述业务逻辑文件;
S5-2:根据所述业务逻辑文件生成JAVA字节码;
S5-3:根据所述JAVA字节码生成所述第一可执行代码。
在本实施例中,在正式的运行过程中,存在着热点代码,也就是hotspot code,即被多次调用的代码,在运行过程中存在一种情况,一个更新后的经过动态编译的代码,被不断的调用,虽然其一直在内存中,但是由于动态编译的代码的运行效率远低于静态编译的代码,故若发现存在热点代码的时候,便将热点代码通过即时编译的方式进行编译,从而形成经过静态编译,运行速度较快的静态可执行代码进行运行,从而兼顾了运行速度和运行效率。
实施例9:
如图1、7所示,本实施例提供一种免重启运维升级方法,包括:
S1:接收访问请求并根据所述访问请求获取所述访问请求对应的业务逻辑文件;;
S2-1:比较所述业务逻辑文件的版本号和所述第一可执行代码的版本号,若所述业务逻辑文件的版本号高于所述第一可执行代码的版本号,进入S3;
S3:编译所述业务逻辑文件,生成所述第二可执行代码;
S4:令所述第一可执行代码更新为所述第二可执行代码。
在本实施例中,通过版本号判断是否需要更新相对于其他的方式,一方面计算起来非常方便,另一方面可以很快的得出是否应当更新,因为在具体的运维过程中,可能会出现上传了错误的老版本文件的情形,而通过比较版本之间的号码关系,可以有效的保证文件的正确性
实施例10:
本实施例提供一种免重启运维升级装置,包括存储器和处理器以及存储在所述存储器上的计算机程序;
所述计算机程序被配置为由处理器调用时,实现实施例5-9任一所述的一种免重启运维升级方法。
实施例11:
本实施例提供一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被配置为由处理器调用时,实现实施例5-9任一所述的一种免重启运维升级方法的步骤。
本发明的技术效果:
(1)通过在被请求调用业务逻辑文件的时候,根据需求动态的编译对应的业务逻辑文件,然后将生成的可执行代码载入到内存当中,克服了传统的JAVAWEB升级部署过程中需要重启动后才可以生效的问题,也就是说在实际的运行过程中,可以再不停止服务的前提下,对源代码进行debug和更新升级,如增加业务逻辑等,同时,用户并不会因为升级而导致服务停止或者是数据丢失;
(2)相对于静态编译,动态编译能够更快的得到可执行代码进而部署到内存中进行运行,从而提高了系统的运行效率;
(3)通过同时采用动态编译、静态编译,在提高了运行灵活性的同时,兼顾了运行速度,避免因纯粹的动态编译而导致的运行效率低下。
(4)通过版本号判断是否需要更新相对于其他的方式,一方面计算起来非常方便,另一方面可以很快的得出是否应当更新,因为在具体的运维过程中,可能会出现上传了错误的老版本文件的情形,而通过比较版本之间的号码关系,可以有效的保证文件的正确性。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (1)

1.一种免重启运维升级方法,所述方法执行在服务器上,其特征在于,包括:
接收访问请求;所述访问请求为用户发出;
根据所述访问请求获取所述访问请求对应的业务逻辑文件;
判断是否需要使用所述业务逻辑文件更新第一可执行代码,当需要更新所述第一可执行代码时,根据所述访问请求获取对应的业务逻辑文件,并编译所述业务逻辑文件,以生成第二可执行代码,并令所述第一可执行代码更新为所述第二可执行代码;
编译所述业务逻辑文件包括:读取所述业务逻辑文件;动态编译所述业务逻辑文件的源代码,生成第二可执行代码;动态编译所述业务逻辑文件的源代码包括对源代码进行debug、更新升级和增加业务逻辑;
还包括读取所述业务逻辑文件;
根据所述业务逻辑文件生成JAVA字节码;
根据所述JAVA字节码生成所述第一可执行代码;
所述判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码包括:比较所述业务逻辑文件的版本号和所述第一可执行代码的版本号,若所述业务逻辑文件的版本号高于所述第一可执行代码的版本号,则需要更新;
该升级方法针对的免重启运维升级系统运行在服务器上,免重启运维升级系统包括:
请求接收模块,用于接收访问请求;
文件获取模块,用于查找并获取所述访问请求对应的业务逻辑文件;
运行缓存模块,用于存储所述访问请求对应的第一可执行代码;
更新判断模块,用于判断是否需要使用所述访问请求对应的业务逻辑文件更新所述第一可执行代码;
编译模块,用于当需要更新所述第一可执行代码时,根据所述访问请求获取对应的业务逻辑文件,并编译所述业务逻辑文件,以生成所述第二可执行代码,并令所述第一可执行代码更新为所述第二可执行代码;
所述编译模块具体包括:源代码读取子模块,用于读取所述业务逻辑文件;
JAVA动态编译子模块,用于动态编译所述业务逻辑文件的源代码,生成第二可执行代码;还包括静态编译模块,所述静态编译模块包括:
静态代码读取子模块,用于读取所述业务逻辑文件;
字节码生成子模块,用于根据所述业务逻辑文件生成JAVA字节码;
字节码解释子模块,用于根据所述JAVA字节码生成所述第一可执行代码;
所述更新判断模块包括版本判断模块,用于比较所述业务逻辑文件的版本号和所述第一可执行代码的版本号,若所述业务逻辑文件的版本号高于所述第一可执行代码的版本号,则需要更新。
CN202011110064.9A 2020-10-16 2020-10-16 一种免重启运维升级方法、系统、装置和介质 Active CN112199110B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011110064.9A CN112199110B (zh) 2020-10-16 2020-10-16 一种免重启运维升级方法、系统、装置和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011110064.9A CN112199110B (zh) 2020-10-16 2020-10-16 一种免重启运维升级方法、系统、装置和介质

Publications (2)

Publication Number Publication Date
CN112199110A CN112199110A (zh) 2021-01-08
CN112199110B true CN112199110B (zh) 2022-05-31

Family

ID=74009859

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011110064.9A Active CN112199110B (zh) 2020-10-16 2020-10-16 一种免重启运维升级方法、系统、装置和介质

Country Status (1)

Country Link
CN (1) CN112199110B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113342323B (zh) * 2021-06-29 2024-03-29 银清科技有限公司 软件在线开发的方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110262818A (zh) * 2019-05-29 2019-09-20 北京达佳互联信息技术有限公司 Java代码热更新方法、装置、电子设备及存储介质
CN111506904A (zh) * 2020-04-21 2020-08-07 北京同邦卓益科技有限公司 漏洞在线修复的方法和装置
CN111562934A (zh) * 2020-04-03 2020-08-21 深圳震有科技股份有限公司 一种基于热补丁的软件系统升级方法、终端及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8806469B2 (en) * 2011-02-22 2014-08-12 International Business Machines Corporation Runtime code replacement
CN106648564A (zh) * 2015-10-30 2017-05-10 阿里巴巴集团控股有限公司 一种用于采集业务数据的方法和装置
CN110275722B (zh) * 2019-06-21 2023-08-08 北京百度网讯科技有限公司 用于升级应用的方法、装置、设备和存储介质
CN111078256B (zh) * 2019-12-20 2024-02-02 广州品唯软件有限公司 自动化测试环境的升级方法、终端及可读存储介质
CN111736916A (zh) * 2020-06-08 2020-10-02 北京达佳互联信息技术有限公司 基于Java语言的动态扩展方法、装置、电子设备及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110262818A (zh) * 2019-05-29 2019-09-20 北京达佳互联信息技术有限公司 Java代码热更新方法、装置、电子设备及存储介质
CN111562934A (zh) * 2020-04-03 2020-08-21 深圳震有科技股份有限公司 一种基于热补丁的软件系统升级方法、终端及存储介质
CN111506904A (zh) * 2020-04-21 2020-08-07 北京同邦卓益科技有限公司 漏洞在线修复的方法和装置

Also Published As

Publication number Publication date
CN112199110A (zh) 2021-01-08

Similar Documents

Publication Publication Date Title
Gal et al. Trace-based just-in-time type specialization for dynamic languages
JP6637398B2 (ja) 判定装置及び判定方法
CN106020873B (zh) 补丁包加载方法及装置
EP2359247B1 (en) Transforming user script code for debugging
JP5460430B2 (ja) 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置
US8443343B2 (en) Context-sensitive slicing for dynamically parallelizing binary programs
US8271958B2 (en) Remapping debuggable code
CN105446712B (zh) 一种应用程序缺陷修补方法及装置
US9329846B1 (en) Cooperative program code transformation
US8423970B2 (en) Method, computer program product, and hardware product for handling breakpoints in an asynchronous debug model
CN102402427A (zh) 一种Java应用程序的更新方法及装置
WO2013119441A1 (en) Transferring program execution from compiled code to interpreted code
US20130125096A1 (en) Systems and Methods for Dynamic Collection of Probe Call Sites
CN105528231A (zh) 一种基于中间辅助函数的软件动态升级方法及系统
CN112882718B (zh) 编译处理方法、装置、设备及存储介质
US20060161896A1 (en) Performing debug requests that are within the debug domain of a class loader
Niephaus et al. Graalsqueak: toward a smalltalk-based tooling platform for polyglot programming
US9098355B2 (en) Method and apparatus for substituting compiler built-in helper functions with machine instructions
CN112199110B (zh) 一种免重启运维升级方法、系统、装置和介质
Xu et al. Efficient checkpointing of java software using context-sensitive capture and replay
Choi et al. Reusable inline caching for JavaScript performance
Béra et al. Sista: Saving optimized code in snapshots for fast start-up
US9841982B2 (en) Locating import class files at alternate locations than specified in classpath information
Park et al. Reusing the Optimized Code for JavaScript Ahead-of-Time Compilation
Kim et al. Optimizing unit test execution in large software programs using dependency analysis

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
GR01 Patent grant
GR01 Patent grant