首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

企业任务调度:quartz 基础知识(1)

2012-10-26 
企业任务调度:quartz 基础知识(一)1. quartz???? Quartz是一个作业调度系统(a job scheduling system),负

企业任务调度:quartz 基础知识(一)

1. quartz

?

??? Quartz是一个作业调度系统(a job scheduling system),负责在约定的时间到达时执行(或通知)其他软件控件。Quartz是以.jar文件的形式发布的,Quartz java库中包含了Quartz所有的核心功能,该功能的主要接口(API)是Scheduler接口,Scheduler接口提供了一些简单的操作,如:schedulering/unscheduling jobs,starting/stopping/pausing the scheduler。

?

??? 如果我们要调度自定义的作业,该作业必须实现Job接口,Job接口包含了一个必须实现的方法:execute(…);如果我们需要实现当到达被调度的时间能够得到通知,我们必须实现TriggerListener或JobListener接口。

?

??? Quartz主要程序不但能够作为独立的应用(带有RMI 接口)运行,也可以作为J2EE组件资源在J2EE应用服务器运行。

?

?

2. Schedule和ScheduleFactory

?

??? 使用Scheduler前必须实例化Scheduler,需要由SchedulerFactory类来创建Scheduler,Factory的实例可以通过在JNDI存储中的Factory的序列化的方式来获取,实例化Factory后直接使用该实例也是很容易的,如下面的例子。

?

??? Scheduler被实例化后就可以启动、暂停或关闭,但是Scheduler一旦关闭就不能再次启动该Scheduler,只有必须再次实例化后才可以;Trigger只有与之对应的Scheduler启动后才能触发与之相关的Job,否则一直处于暂停状态。

?

??? 下面是一个实例化、启动Scheduler和调度执行作业的例子:

?

有状态vs.无状态的作业(Stateful vs. Non-Stateful Jobs)


??? 这部分介绍Job的状态,即有关JobDataMap内容,Job实例可以分为:有状态和无状态;无状态Job只在注册进Scheduler时才有JobDataMap数据,无状态Job运行结束后不保存JobDataMap数据,这样意味着在无状态Job运行过程中修改过的JobDataMap数据在无状态Job再次运行时将无法得到;而有状态Job与之相反,有状态Job每次运行结束时将存储有状态Job的JobDataMap数据,但是有状态Job为了保证JobDataMap的数据的一致性,有状态Job无法并行运行,当Trigger需要再次触发执行一个正在运行的Job时,Trigger会自动的延迟触发,直到正在运行的Job运行结束后才再次触发该Job。

?

??? 我们需要有状态Job时必须实现StatefulJob接口,而不是上面的例子中的Job接口。

?

??? 作业的其他属性(Other Attributes Of Jobs)


??? 以下对Job实例的其他属性进行介绍:

?

l???????? 持久性(Durability):如果Job是非持久性的,一旦没有活动的Trigger与之相关联时,该Job会自动从Scheduler中删除掉;

?

l???????? 易挥发性(Volatility):如果Job是易挥发的,当与之相关联的Schuduler停止之后,不会通过JobStore对该Job进行保存;

?

l???????? 可恢复性(RequestsRecovery):如果Job是可恢复的,该Job运行期间与之关联的Scheduler非正常停止(由于进程停止或机器关闭等引起)时,当该Scheduler再次启动时,该Job会重新执行一次;

?

l???????? JobListener:一个Job可以被关联到一个或多个JobListener,当该Job执行时,与之关联的JobListener会得到通知;

?

?? 作业接口中的execute(…)方法(The Job.execute(…) Method)


??? Execute方法只允许有一种类型的异常(包括RuntimeException)可以抛出,该异常就是JobExecutionException;因此我们必须把execute方法的所有内容放在try-catch语句中。当需要了解如何处理异常时,我们还必须阅读有关JobExecutionException的JavaDoc文档。

?

5. name和group

?

??? 注册进Quartz Scheduler中的Job和Trigger是通过name来标识的,为了后期的维护,Job和Trigger能够按类划分为group,在一个group中每个Job和Trigger的name必须为唯一的,即Job和Trigger的标识是由各自的name+group组成的。

?

?

?

?

热点排行