我们可以使Scheduler简单地执行一个实现了Job接口的Java组件,Job接口定义如下:
package org.quartz;
public interface Job {
public void execute(JobExecutionContext context)
throws JobExecutionException;
}
当Job的Trigger执行触发后,Scheduler将调用执行execute(…)方法,JobExecutionContext对象是该方法的参数,为Job实例提供了一个执行该Job的Scheduler的handle、一个触发该execute方法的Trigger的handle、Job的JobDetail对象和一些其他运行时的环境变量值。
JobDetail对象是在Quartz的客户端(我们的程序)在Job被关联加入到Scheduler时创建的,JobDetail包含了Job的各种属性值和JobDataMap,JobDataMap中存放了与之相关的Job类实例的状态信息。
Trigger对象是用于触发Job的执行,为了调度一个作业,我们需要实例化一个Trigger,并根据作业的需求设置该Trigger的属性,Trigger有两种:SimpleTrigger和CronTrigger。
SimpleTrigger只适用于在规定的时刻触发Job的执行,或在规定的期限内按一定的时间间隔重复触发Job的执行;当我们需要基于日期类型(如:每星期5中午或每个月的第10天10:15)的作业调度时,需要用到CronTrigger。
在Quartz中Job与Trigger之间是相互独立的,可以对Job和Trigger分别进行各自的定义设置,然后根据需要进行组合,这样就可以实现一个Job可以与许多不同的Trigger相关联,一个Trigger也可以关联到不同的Job上,达到了松散耦合的目的,当需要更改一个Job的Trigger时,只需要修改或替换对应的Trigger就可以了,而无须重新定义一个与该Job关联的Scheduler。