基于Quartz的可视化代理定时任务的研究与设计
2021-11-03屈洪雪陈双徐海洋
屈洪雪 陈双 徐海洋
(1.山东电子职业技术学院 山东省济南市 250000 2.浪潮集团 山东省济南市 250000)
1 引言
Quartz[1]是一个开源的作业调度框架,完全由Java 编写,为在Java 应用程序中进行作业调度提供了简单而强大的机制。Quartz 能够创建简单的或复杂的调度来用执行一个或多个作业。常见的使用场景包括:定时发送消息、定时生成报表、自动更新静态数据及自动结账等等。Quartz 的优势主要在于提供强大的、灵活的调度机制的同时保留了使用方法的简单性[2]。但是Quartz 主要专注于后台执行,缺乏了可视化界面,使用者无法直观的观察到系统中作业调度的情况;同时任何符合Quartz 标准的作业都可以在系统中运行,这种情况增加了系统管理作业的难度。针对Quartz 的特点以及上述问题,本文基于Spring 设计的具有代理功能的Quartz 可视化定时任务管理方案来帮助我们解决。
2 Quartz概述
Quartz 有两个核心组件,它们分别是Job 和Trigger。其中Job 用于表示被调度的任务,是定时执行的实际业务处理过程[3];trigger 表示何时触发任务执行。下面是Quartz 中的几个关键概念:
(1)Job 接口:该接口内只有一个Execute 方法,在Quartz 中,所有的定时任务都必须要实现该方法。
(2)Trigger 触发器:根据设置的任务计划规则来触发执行调度任务。
(3)JobDetail:表示每个计划任务相关的详情信息。
(4)调度器Scheduler:Quartz 中所有的调度任务执行与否都由该调度器控制[4]。
3 方案设计
3.1 整体逻辑设计
该方案的整体逻辑设计主要分为三层:Quartz 核心层、Quartz代理层以及Quartz 展示层。见图1,其中:
图1:整体逻辑设计
(1)Quartz 核心层主要使用Quartz 的调度器Scheduler 与调度程序进行核心交互;提供了Job 接口,该接口由被调度程序执行的任务类所实现;通过JobDetail 来定义定时任务的实例;提供Trigger 触发器,主要用来表明任务在什么时候会执行。
(2)Quartz 代理层主要用来提供扩展的Job 接口,我们称之为代理Job 接口。该接口继承自Quartz 核心层的Job 接口,主要提供用于实现调度任务个性化显示的方法名,该类方法主要用于被调度程序执行的常规的任务类所实现;其次,该层提供代理Job 注解,该Job 注解是用来丰富可管理的任务信息;内部使用代理Job 类来实现Quartz 的Job 接口,用于与Quartz 对接;并且内部使用代理Job 实例用于运行常规类定义的作业。
(3)Quartz 展示层主要提供了触发器组Trigger Group、Trigger、任务组Job Group 及Job 的维护界面,通过在前台维护界面编辑并保存相应的信息转换为数据库中的一条条记录,同时在Job 维护界面可供代理层进行ID 选择,该ID 指的是代理Job 类的具体实现对应的Id;提供了Job 绑定Trigger、Job 启动及Job 停止等Job 的操作功能,方便使用者更直观的操作Job。
3.2 代理设计
代理设计主要是完成如下定义:
(1)定义HSPSchedulerJob 注解,用以维护将来被注解的常规类的BeanId 和Job 的名称;
(2)定义IHSPSchedulerJob 接口及execute 接口方法,用以被调度程序执行的常规的任务类所实现。具体设计如图2 所示。
图2:代理设计
3.3 可视化设计
可视化设计的主要目的是更直观、更高效的对任务进行管理。将定时任务的各项属性:任务组编号、任务组名称、任务编号、任务名称、任务状态及触发器信息等展示到前端界面,供用户直观、方便查看定时任务的执行状态。具体界面设计如图3 所示。
图3:可视化设计
4 方案实现
4.1 可视化实现
(1)对任务表、触发器表的结构进行设计,设计结构如下所示:
(2)提供后端接口供页面访问
4.2 代理实现
代理注解设计如下所示:
4.3 调度实现
5 总结与展望
本文基于开源的任务调度框架Quartz 设计的具有代理功能的方案在保留原有Quartz 框架调度灵活、功能强大、方法简单的优势上增加了Quartz 代理层。通过在代理层定义拓展的IHSPSchedulerJob接口,用户可以通过实现该接口中定义的方法实现定时任务的可视化操作,便于任务的管理,方便开发人员或者系统维护人员及时发现定时任务的执行状态及状况处理。本方案目前可以应用一般的应用场景,但是对于体量庞大的用户群和海量数据或者是一些相当复杂的业务场景,该方案还有待于完善。