定时任务的管理方法、装置、设备和存储介质与流程

文档序号:33775919发布日期:2023-04-18 23:02阅读:35来源:国知局
定时任务的管理方法、装置、设备和存储介质与流程

本技术涉及定时任务,尤其涉及一种定时任务的管理方法、装置、设备和存储介质。


背景技术:

1、目前,较广为人知的支撑分布式的定时任务技术为quartz框架,是由java实现的一种开源的根据日程管理的定时任务系统。此外,还有spring内置的定时任务调度功能@scheduled,结合@enableschedulerlock实现分布式的定时任务功能。但以上技术主要关注于定时任务的本身,缺少了针对定时任务的启动、暂停等诸如此类的调度。

2、相关技术中,通过结合数据库存储、基于数据结构服务器(redis)的分布式锁、前端可视化和消息队列(message queue,简称mq)等技术进行了定时任务处理的改进,可以做到随时控制调度定时任务的执行、暂停、重设周期、分布式运行、集群运行和前端页面操控等调度方面的功能,但全新或修改过的定时任务代码无法动态“编入”到正在运行中的生产系统中。


技术实现思路

1、本技术提供一种定时任务的管理方法、装置、设备和存储介质,用以解决全新或修改过的定时任务代码无法动态“编入”到正在运行中的生产系统中的问题。

2、第一方面,本技术提供一种定时任务的管理方法,包括:

3、获取待发布定时任务的代码代码可通过在线编码、java文件上传和压缩包上传中的任一种方式在前端可视化页面上传;

4、对代码和代码对应的工具包进行编译,得到字节码,并将字节码缓存至缓存映射表中;

5、依次调用类发现函数和类加载函数,类发现函数用于根据缓存映射表中的字节码生成代码对应的类文件,类加载函数用于将类文件动态加载到java虚拟机的方法区;

6、通过反射,对类文件进行实例化,生成任务实体,并对任务实体进行依赖对象注入赋值;

7、将赋值后的任务实体动态发布到任务对象工厂。

8、一种可能的实施方式中,对任务实体进行依赖对象注入赋值,包括:定位任务实体中@autowired注解或@resource注解的域;通过applicationcontext.getbean()和域的field.set()对任务实体进行依赖对象注入赋值。

9、一种可能的实施方式中,对代码和代码对应的工具包进行编译,得到字节码,包括:从全球广域网应用的安全目录或lib路径遍历代码依赖的工具包;将工具包作为参数传入,调用javacompiler对代码进行编译,得到字节码。

10、一种可能的实施方式中,将赋值后的任务实体动态发布到任务对象工厂,包括:确定任务对象工厂中是否存在任务实体,若不存在,则将赋值后的任务实体注册至任务对象工厂;若存在,则将任务对象工厂中已存在的任务实体替换为赋值后的任务实体。

11、一种可能的实施方式中,在将赋值后的任务实体动态发布到任务对象工厂后,将任务实体的名称属性与代码持久化记录到数据库。

12、一种可能的实施方式中,将任务实体的名称属性与代码持久化记录到数据库,包括:确定数据库中是否存在名称属性;若存在,则将数据库中名称属性对应的原定时任务记录转移到job_compile_his表中,并将名称属性与代码持久化记录到数据库的job_compile表中;如果不存在,则将名称属性与代码持久化记录到数据库的job_compile表中。

13、一种可能的实施方式中,将任务实体的名称属性与代码持久化记录到数据库后,还包括:通过守护线程心跳轮询,获取schedule_job表中的增量任务,守护线程是在生产系统启动过程中利用@postconstruct注解启动的;将增量任务纳入到任务管理中心中。

14、一种可能的实施方式中,任务管理中心用于对定时任务进行调度,调度包括执行记录、告警通知和失败重试中的至少一种。

15、第二方面,本技术提供一种定时任务的管理装置,包括:

16、获取模块,用于获取待发布定时任务的代码,代码可通过在线编码、java文件上传和压缩包上传中的任一种方式在前端可视化页面上传;

17、编译模块,用于对代码和代码对应的工具包进行编译,得到字节码,并将字节码缓存至缓存映射表中;

18、生成模块,用于依次调用类发现函数和类加载函数,类发现函数用于根据缓存映射表中的字节码生成代码对应的类文件,类加载函数用于将类文件动态加载到java虚拟机的方法区;

19、赋值模块,用于通过反射,对类文件进行实例化,生成任务实体,并对任务实体进行依赖对象注入赋值;

20、发布模块,用于将赋值后的任务实体动态发布到任务对象工厂。

21、一种可能的实施方式中,赋值模块可以具体用于:定位任务实体中@autowired注解或@resource注解的域;通过applicationcontext.getbean()和域的field.set()对任务实体进行依赖对象注入赋值。

22、一种可能的实施方式中,编译模块可以具体用于:从全球广域网应用的安全目录或lib路径遍历代码依赖的工具包;将工具包作为参数传入,调用javacompiler对代码进行编译,得到字节码。

23、一种可能的实施方式中,发布模块可以具体用于:确定任务对象工厂中是否存在任务实体,若不存在,则将赋值后的任务实体注册至任务对象工厂;若存在,则将任务对象工厂中已存在的任务实体替换为赋值后的任务实体。

24、一种可能的实施方式中,定时任务的管理装置还可以包括持久化模块,在将赋值后的任务实体动态发布到任务对象工厂后,持久化模块可以具体用于将任务实体的名称属性与代码持久化记录到数据库。

25、一种可能的实施方式中,持久化模块还可以用于:确定数据库中是否存在名称属性;若存在,则将数据库中名称属性对应的原定时任务记录转移到job_compile_his表中,并将名称属性与代码持久化记录到数据库的job_compile表中;如果不存在,则将名称属性与代码持久化记录到数据库的job_compile表中。

26、一种可能的实施方式中,定时任务的管理装置还可以包括纳入模块,纳入模块可以具体用于:通过守护线程心跳轮询,获取schedule_job表中的增量任务,守护线程是在生产系统启动过程中利用@postconstruct注解启动的;将增量任务纳入到任务管理中心中。

27、一种可能的实施方式中,定时任务的管理装置还可以包括调度模块,调度模块可以具体用于从任务管理中心对定时任务进行调度,调度包括执行记录、告警通知和失败重试中的至少一种。

28、第三方面,本技术提供一种电子设备,包括:存储器和处理器。存储器用于存储程序指令;处理器用于调用存储器中的程序指令执行第一方面的定时任务的管理方法。

29、第四方面,本技术提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被执行时,实现第一方面的定时任务的管理方法。

30、第五方面,本技术提供一种计算机程序产品,计算机程序产品包含计算机程序,计算机程序被处理器执行时用于实现第一方面的定时任务的管理方法。

31、本技术提供的定时任务的管理方法、装置、设备和存储介质,通过获取待发布定时任务的代码,代码可通过在线编码、java文件上传和压缩包上传中的任一种方式在前端可视化页面上传,即可以通过前端可视化页面实现多种形式的待发布定时任务代码的上传或编写;对代码和代码对应的工具包进行编译,得到字节码,并将字节码缓存至缓存映射表中;依次调用类发现函数和类加载函数,类发现函数用于根据缓存映射表中的字节码生成代码对应的类文件,类加载函数用于将类文件动态加载到java虚拟机的方法区;通过反射,对类文件进行实例化,生成任务实体,并对任务实体进行依赖对象注入赋值;将赋值后的任务实体动态发布到任务对象工厂,以实现全新或修改过的待发布定时任务代码动态“编入”到正在运行中的生产系统中,可以提高系统的灵活性,在系统不停业和不发版的情况下,最大程度的实现待发布定时任务代码的上传、开发、修改以及发布的自由,最小程度的影响系统运行。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1