就象以前提到的,一个实现了
Job接口的
Java类就能够被调度器执行。接口如下:
package org.quartz;
public interface Job {
public void execute(JobExecutionContext context) throws JobExecutionException;
}
很简的,当
Job的
trigger触发时,
Job的
execute(..)方法就会被调度器调用。被传递到这个方法里来的
JobExecutionContext对象提供了带有
job运行时的信息:执行它的调度器句柄、触发它的触发器句柄、
job的
JobDetail对象和一些其他的项。
JobDetail对象是
Job在被加到调度器里时所创建的,它包含有很多的
Job属性设置,和
JobDataMap一样,可以用来存储
job实例时的一些状态信息。
Trigger对象是用来触发执行
Job的。当调度一个
job时,我们实例一个触发器然后调整它的属性来满足
job执行的条件。触发器也有一个和它相关的
JobDataMap,它是用来给被触发器触发的
job传参数的。
Quartz有一些不同的触发器类型,不过,用得最多的是
SimpleTrigger和
CronTrigger。
如果我们需要在给定时刻执行一次
job或者在给定时刻触发
job随后间断一定时间不停的执行的话,
SimpleTrigger是个简单的解决办法;如果我们想基于类似日历调度的触发
job的话,比如说,在每个星期五的中午或者在每个月第
10天的
10:
15触发
job时,
CronTrigger是很有用的。
为什么用
jobs和
triggers呢?很多任务调度器并没有任务和触发器的概念,一些任务调度器简单定义一个“
job”为在一个执行时间伴随一些小任务标示,其他的更像
Quartz里
job和
trigger对象的联合体。在开发
Quartz时,开发者们决定,在调度时间表和在这上面运行的工作应该分开。这是很有用的。
例如,
job能够独立于触发器被创建和储存在任务调度器里,并且,很多的触发器能够与同一个
job关联起来。这个松耦合的另一个好处就是在与
jobs关联的触发器终止后,我们能够再次配置保留在调度器里的
jobs,这样的话,我们能够再次调度这些
jobs而不需要重新定义他们。我们也可以在不重新定义一个关联到
job的触发器的情况下,修改或替代它。
当
Jobs和
triggers被注册到
Quartz的调度器里时,他们就有了唯一标示符。他们也可以被放到“
groups”里,
Groups是用来组织分类
jobs和
triggers的,以便今后的维护。在一个组里的
job和
trigger的名字必须是唯一的,换句话说,一个
job和
trigger的全名为他们的名字加上组名。如果把组名置为
”null”,系统会自动给它置为
Scheduler.DEFAULT_GROUP
现在,我们大概有了一些
jobs和
triggers的理解,随后
2节我们将根多的了解它们。