在日新月异的软件业务环境中,越来越多的作业调度系统被应用。在设计一个调度框架时,利用Quartz框架就可以很好地帮助企业实现常规和复杂的特殊需求的作业调度的功能[1]。Quartz是开源组织“OpenSymphony”的一个项目[2],它完全基于Java实现,具有强大的调度功能[3]。本文将探讨一个以Quartz为核心,能够按照预定计划触发作业,并可以应对掉电和重启的作业调度框架。
本系统的核心在作业调度模块,主要负责任务的精确设定与触发。当系统启动时,调度模块通过web服务启动Quartz的实时任务,将作业触发信息写入Quartz系统和数据库中。其中存入Quartz系统是为了在设定的时刻启动作业,而存入数据库是为了进行数据的持久化,为重启时做好还原现场的准备。
作业系统的后台设计如下:
(1)调度表:保存作业中的调度内容,属于Quartz基本框架中的核心表。
(2)配置表:保存配置信息,框架将依赖此表。
(3)触发表:保存所有作业的触发内容,属于Quartz基本框架中的核心表。
在使用quartz系统时需要导入系统包,并继承和使用quartz的原生态接口,才能正常使用。一般来说,常用的两个类如下:
(1)调度类:将调度的内容写入Quartz系统,到了规定的时间将会被Quartz触发。
(2)触发类:触发类是quartz的核心,规定了触发时刻、结束时刻,运行次数等重要信息。本系统设计为可以灵活选择两种触发模式,分别是Corn触发型和瞬时触发型。
(a)Cron触发型
Cron触发型是基于cron表达式来工作的。cron表达式是Quartz专用字符串,quartz可以通过解析用户给定的cron表达式来判断用户预定的触发信息。表达式包含七个部分,表示秒、分钟,小时,日期,月份,周数,年数。表达式七个部分的不同组合可以表达所有的调度计划。
(b)瞬时触发型
瞬时触发型的设计,是采用精准时间间隔来触发任务,也就是说每次任务被系统触发的间隔是固定的。Quartz系统一般采用的间隔单位是秒、分钟,小时,并以小时为上限。
如果使用Quartz系统,首先要实现job接口,job接口中有一个execute方法,用于编写业务逻辑,随后在触发类中设置触发信息。Quartz系统会使用调度类的调度方法,最终在Quartz系统中写入新的调度信息。在预定的调度时刻,作业会被触发,调度类将会解析作业参数,运行任务实例,通过execute方法执行编写的业务逻辑。
调度引擎模块的核心主要是两个方面,第一是将作业信息的调度计划写入Quartz系统内,,二是将作业信息的调度内容存入本地数据库,用于重启后的还原。
(1)本地存储。由于重启系统或者断电是不可控事件,Quartz系统中的调度内容随时有丢失的可能,如果不做好本地存储的备份,当系统在不可控的重启或者断电后,所有的调度内容都会丢失,导致系统的彻底混乱。本地存储的设计主要是设计两张表:调度表保存作业的调度信息,触发表保存调度类型、调度状态,以及触发次数,作业运行状态等。
(2)当新的调度内容创建后,系统会将调度的具体内容、运行时间、运行次数等核心参数打包封装传递给调度模块。调度模块对传递来的数据进行格式化,最终将这些信息存入调度表和触发表,并使用作业号作为两张表的关联信息。以上工作完成后,调度内容就完整的进入了数据库。与此同时,Quartz系统也实时保存了调度内容,并开始将这条调度内容放入运行列表,以便在规定的时间进行触发。当调度内容在规定的时间触发时,服务器中的Quartz系统启动调度任务,执行调度作业。当业务逻辑运行完毕,Quartz系统更改调度表和触发表,完成整个调度流程。(见图2)
在任何时刻,服务器如果出现断电或者重启的严重情况,Quartz系统中的实时调度内容都会随着系统的关闭而全部丢失。因此,Quartz系统在启动后,读取调度表和触发表内的调度内容,并加以解析和处理,重新加载到Quartz系统中的实时列表,最终还原了重启前的所有任务。(见图3)
本文设计了一个以Quartz系统为基础的作业调度系统,该系统能够可以在很多业务场景下使用,并能够解决重启与断电后的还原问题,本系统的设计思路可以应用于其他作业调度的应用场景,具有一定的参考价值。
摘要:目前作业调度系统存在于很多的业务场合,本文介绍一种采用web模式,基于Quartz的调度系统设计,能够应用在大量的调度环境。系统采用了重启还原设计,能够在系统重启或者系统掉电后恢复工作。系统提供了完善的定时触发功能,可以有效的应用于广泛的业务工作场景中。
关键词:框架,Quartz,作业
[1] 孔德兰,周建松.重视和加强高职院校基层教学组织建设[J].教育与职业2017,(22),108-111.
[2] 徐振法唐铃凤.高校教研室建设与思考[J].科教文汇,2018,(09),122-123+141.
[3] 陆国栋孙健孟琛吴华.高校最基本的教师教学共同体:基层教学组织[J].高等工程教育研究2014,(01),58-65+91.