Web应用与Quartz的整合研究
2018-09-10刘光明朱肖颖
刘光明 朱肖颖
【摘 要】任务调度的功能多数应用于邮件的定时发送、数据的定时备份、自动执行业务处理等类型的Web应用。任务调度是基于准确时间点的调度,同时也可以根据用户自己设定的时间间隔或设定的调度次数自动执行任务。文章以介绍定时任务调度框架Quartz的特点、使用优势及其基本功能为主,分析Quartz与Spring框架进行整合开发,进行Web的定时调度功能开发的机制。
【关键词】任务定时调度;Spring;Quartz;Timer;Web
【中图分类号】TP311 【文献标识码】A 【文章编号】1674-0688(2018)03-0114-03
0 引言
随着信息技术的快速发展,计算机软件在各行各业中都扮演者相当重要的角色,发挥着促进企业快速发展的重要作用。在各行各业的管理系统中,都可能会存在着系统数据定时备份、定时处理相对的业务功能、定时发送邮件或是在设定的特定时间间隔内自动执行某个系统特定功能的调度任务的需求。使用定时任务调度框架Quartz就能够帮助企业快速高效地完成这种常规的或复杂的调度作业的需求。
1 Quartz框架介绍
Quartz框架是一个具有强大的、能够灵活配置调度规则或是调度时间的、免费开源的任务调度框架。使用Quartz框架可以为企业信息管理系统的定时调度任务进行简单快捷灵活的配置调度机制,实现企业常规和非常规的复杂调度功能。开发人员可以根据业务的具体需求设置调度的时间点或时间间隔来进行具体的任务调度。Quartz框架能够通过与Spring很好地集成来提供强大的、可灵活配置的调度功能并应用到J2EE Web应用的开发中,它在企业应用调度开发中占据极其重要的地位,是目前使用最广泛的任务调度框架。
任务调度器(Scheduler)、触发器(Trigger)和任务(Job)是任务调度框架Quartz的最重要的三大核心组件。其中调度任务的核心管理者是任务调度器(Scheduler),调度任务的操作者是触发器(Trigger),调度任务(Job)是系统中相应的功能模块。开发人员可以根据具体的业务调度需求配置任务和触发器的监听规则,进行任务调度。其关系如图1所示。
调度器(Scheduler)是Quartz框架最主要的核心模块,它对Quartz的应用运行的环境起到管理的作用,Quartz框架主要的API也是调度器(Scheduler)。对于Quartz开发人员来说,Scheduler是Quartz调度框架与开发人员发生交互的中间桥梁,大多数的交互过程都是以Scheduler为基础进行的。Scheduler是通过与框架内的各个JobDetail和Trigger结合来进行具体的调度工作的,而不是独立地完成具体的调度任务。JobDetial和Trigger只需要在Scheduler上装配注册好,调度作业就会伴随着容器的启动自动执行。一个完整的Quartz调度任务,必须包含触发器(Trigger)、调度器(Scheduler)和任务(Job)这3个最为重要的核心要素。触发器就是一个任务的驱动器,负责对调度作业进行定时驱动,否则作业将无法正常执行。一个调度任务可以与多个触发器相对应,但是一个触发器只能对应一个任务对一个任务进行驱动。Quartz作为一个优秀的开源调度框架能够与Spring集成实现强大的调度作业,而且对运行环境也没有依赖,Quartz还提供了强大的集群及分布式能力,其强大的调度机制支持多样化的调度方法。
2 JDK Timer介绍
Timer是JDK自帶的任务调度工具类。结构简单易用,功能也比较有限,而且容易出现误差。Timer和Timer Task是使用Timer实现任务调度的2个核心类。开发人员使用Timer来实现任务调度的功能时,必须创建一个继承TimerTask的子类,而且重写run()方法,然后Timer再采用单线程的方式去执行调度任务。
Timer最大的优点是简单易用,但是Timer采用的是单线程的执行方式,同一时间只能有一个任务在执行,同一时间没有办法执行多个任务。当遇到更多更复杂的调度需求时,Timer难以满足需求的变化。
3 Scheduled Executor介绍
Scheduled Executor是在Timer的基础上扩展的一个任务调度框架。Scheduled Executor中的每一个调度任务都会由线程池中对应的一个线程去执行任务。Scheduled Executor与Timer比较来说,Scheduled Executor中执行的任务是可以并非执行的,且任务的执行之间是没有影响的。Scheduled Executor是一个比Timer更为通用的任务调度的通用品,它允许同时存在多个服务线程,且只需要实现Runnable接口,不需要继承Time Task。但是Scheduled Executor跟Timer一样都不能胜任更加复杂的调度需求,只能供基于开始时间与重复间隔的任务调度。
Timer、Scheduled Executor,跟Qu-
artz比有一定的差距。相对于其他2个调度工具而言,Quartz具有更加强大且灵活的配置规则,能够快捷地配置实现复杂的调度需求。如果你只需要特别简单的任务调度,那么Timer就可以满足需求。如果你的调度需求比较复杂,使用Quartz要比Timer、Scheduled Executor简单。
4 Quartz整合Web的实现过程
整个整合过程主要可分为以下3步:第一步配置web.xml文件,web.xml文件在整个web应用中一个载体的角色,用来调度配置应用信息;第二步配置quartz.properties,主要完成一些调度参数的设置;第三步编写调度任务的实现类,在实现类中实现业务的调度逻辑。以下是详细的整合过程。
4.1 web.xml中配置Spring
配置Spring、Struts2用来初始化配置信息。核心配置信息如图2所示。
4.2 配置quartz.properties
开发人员根据具体业务的调度需求在quartz.properties这个配置文件中配置自己业务需求的一些特定的参数,如相应的时间间隔或是时间点这类的调度信息。主要配置信息如图3所示。
Spring应用启动后就会按照配置好的信息启动调度任务,当然也可以单独整合集成Quartz,并不一定要使用Spring。
4.3 编写目标类
目标类是整个调度任务中最关键的类,在这类里面开发人员实现自己的调度逻辑,这个类必须继承Quartz Job Bean,在Work方法里面实现调度逻辑。目标类的核心代码如图4所示。
5 结语
本文介绍了JDK Timer、Scheduled Executor、Qua-
rtz框架的功能、特点及这3个工具的优缺点,探讨了如何将Quartz与Spring结合应用到Web开发中,建立了一个可以满足企业常规调度需求的简单可用的调度系统,具有良好的扩展性与灵活性。
参 考 文 献
[1]胡利强,周冬初,王伟.Quartz调度器与Web程序整合的研究和应用[J].计算机与现代化,2010(8):98-99,104.
[2]范云飞.定时任务调度服务系统设计与实现[D].北京:北京邮电大学,2008.
[3]张鹏,白朝旭,王锟,等.基于Quartz的集团化调度任务分布部署研究[J].现代电子技术,2014,37(2):80-83.
[4]劉志鹏,卫晨.基于Quartz与Spring的动态任务调度系统的设计与实现[J].计算机光盘软件与应用,2014,17(13):263-264.
[5]赵晓丽.基于Spring的定时器的应用实现[J].太原师范学院学报:自然科学版,2015,14(4):48-53.
[6]王波.ERP系统中邮件提醒定时器框架的设计与应用[J].现代电子技术,2012,35(6):25-27,32.
[7]丁振凡,李馨梅.Spring的任务定时调度方法的研究比较[J].智能计算机与应用,2012,2(4):55-56,60.
[8]谢蒙,王晶,王纯.综合数据业务平台定时任务调度组件的设计与实现[J].电信技术,2012(8):79-81.
[9]王秀,孙忠林,姜莉.任务定时调度在企业级开发中的研究[J].电子科技,2015,28(10):100-102,107.
[10]许艳丹.基于Quartz.NET框架的任务调度平台研究与设计[J].软件导刊,2016,15(2):82-84.
[责任编辑:钟声贤]