定时任务Java编写综述之Quartz理论(1)

定时任务Java编写综述

目前我所用过的定时任务机制主要分三类:OS级的Linux crontab命令方式、Java语言级的JDK自带API、第三方API接口如Quartz(当然,其他MVC框架如Spring基于Quartz实现了更人性化的API接口,此类接口一并归入Quartz类族)。

 

这三种方式相比,OS级不用专门开启监听器,占用系统资源较少,是定时任务首选的实现方式;JDK自带API主要是TimerTimeTask,这些API提供的接口功能简单,往往不能满足用户定时任务设置需要;QuartzJava语言编写的API,其可以单独部署,也可以作为系统的模块嵌入既有代码中,通过开启监听触发定时任务的方式实现,相对而言,特别是用此种方式开辟大量监听很耗资源。

 

下面分别介绍这三种常用的定时任务实现方式。

 

 

3. 第三方API接口如Quartz

Quartz是一个任务日程管理系统,这个系统可以与任何其他软件系统集成或者一起使用。简而言之,任务进度管理器就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。

 

Quartz相当轻量,并且需要非常少的步骤/配置,如果需求比较基本,Quartz确实非常容易使用。

Quartz具有容错性,并且可以在你系统重起的时候持久化(记住)被纳入日程的任务。

3.1 Quartz功能简介

 

Quartz特点:

Quartz能嵌入到任何独立的应用中运行。

Quartz能在应用服务器或者Servlet容器中实例化,并且能够参与XA事务。

Quartz能够以独立的方式运行(在它自己的Java虚拟机中),可以通过RMI使用Quartz

Quartz可以被实例化为独立程序的集群(有负载均衡和容错能力)

3.2 从软件组件的角度来看Quartz

Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。

如果你想将软件组件的执行纳入到日程中,它们只需简单地实现Job接口,这个接口有一个execute()方法。如果希望在日程安排的时间到达时通知组件,那么这些组件应实现TriggerListener或者JobListener接口。

Quartz主过程可以在应用中启动或者运行,也可以作为一个独立的应用(带有RMI接口),或者在一个J2EE 应用服务器中运行,并且可作为其它J2EE组件的一种引用资源。

 

3.3 为什么不使用java.util.Timer?

JDK1.3开始,Java有了内建的定时器功能,即通过java.util.Timerjava.util.TimerTask来实现,为什么有人用Quartz而不用这些标准特性呢?有很多原因,下面是其中的一些:

1. Java定时器没有持久化机制。

2. Java定时器的日程管理不够灵活(只能设置开始时间、重复的间隔,设置特定的日期、时间等)

3. Java定时器没有使用线程池(每个Java定时器使用一个线程)

4. Java定时器没有切实的管理方案,你不得不自己完成存储、组织、恢复任务的措施。

一言以蔽之,这两个新类可以实现一个最基本的调度器。也就只能作为我们理想的完整调度器框架的一个小的部件。任何严格意义的作业调度器都提供直接指定执行时间,存储作业信息到多种介绍和使用钩子进行定制及其他更多的功能。单纯靠JDK的那两个类还不足以构建一个真正的作业调度器。JAVATimer类也没办法对作业和触发器作相应的组织,使用每任务一个线程,而不是线程池的方式,还有其他不足之处难以成全其实现一个完全意义的作业调度器。

 

流行的几个解决方案

Flux Schedulerwww.fluxcorp.com/

Enterprise Batching Queuing    www.argent.com/p/qe/qe.html

Unicenter AutoSys Job Management 4.5www.ca.com

BMC Software ControlM     www.bmc.com

Cybermation ESP Espresso 4.2    www.cybermation.corly;9'm

 

Vexus consulting Avatar Job Scheduling Suite 4.5.5        www.vexus.ca

 

Argent software The Argent Job Scheduler 4.5A    www.argent.com

 

Tidal Enterprise Scheduler  www.tidalsoftware.com

 

 

猜你喜欢

转载自aoyouzi.iteye.com/blog/1860116
今日推荐