Quartz API
Quartz API的关键接口是:
- Scheduler - 与调度程序交互的主要API。
- Job - 希望由调度器执行的组件实现的接口。
- JobDetail- 用于定义作业的实例。
- Trigger-定义执行给定Job的时间表的组件。
- JobBuilder-用于定义/构建定义Jobs实例的JobDetail实例。
- TriggerBuilder-用于定义/构建触发器实例。
调度器的生命周期受其创建的限制,通过SchedulerFactory和对其shutdown()方法的调用。一旦创建了调度器实例,就可以使用add, remove和list Jobs和Triggers,并执行其他与调度相关的操作(例如暂停触发器)。然而,如第1课中所示,调度器实际上不会对任何触发器(执行任务)执行操作,而是通过start()方法启动。
Quartz提供定义域特定语言的“builder”类。在前一课中,您看到了一个例子,我们再次介绍一部分内容:
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("myJob", "group1") // name "myJob", group "group1"
.build();
// Trigger the job to run now, and then every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
构建任务定义的代码块使用从JobBuilder类静态导入的方法。同样,构建触发器的代码块使用从TriggerBuilder类导入的方法 - 以及SimpleScheduleBulder类。
DSL的静态导入可以通过以下导入语句来实现:
import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.DateBuilder.*;
各种“ScheduleBuilder”类具有与定义不同类型的时间表有关的方法。
DateBuilder类包含各种方法,用于为特定时间点轻松构建java.util.Date实例(例如表示下一个偶数小时的日期 - 换句话说,如果当前是9:43:27,则为10:00:00)。
任务和触发器
Job是一个实现Job接口的类,它只有一个简单的方法:
The Job Interface
package org.quartz;
public interface Job {
public void execute(JobExecutionContext context)
throws JobExecutionException;
}
当任务的触发器触发时,execute(..)方法由调度程序的其中一个工作线程调用。传递给此方法的JobExecutionContext对象为任务实例提供有关其“运行时”环境的信息 - 执行它的调度程序的实例,触发执行的触发器的实例,任务的JobDetail对象以及其他几个信息。
JobDetail对象是在Job添加到调度器时由Quartz客户端(您的程序)创建的。它包含Job的各种属性设置,以及一个JobDataMap,可用于存储任务类的给定实例的状态信息。它基本上是任务实例的定义,并在下一课中进一步详细讨论。
触发器对象用于触发任务的执行。当你希望安排一项任务时,你可以实例化一个触发器并“调整”它的属性以提供你想要的安排。触发器也可能有一个与它们相关的JobDataMap - 这对于将参数传递给特定于触发器触发的Job是很有用的。 Quartz提供了一些不同的触发器类型,但最常用的类型是SimpleTrigger和CronTrigger。
特性
任务和触发器在向Quartz调度器注册时给出标识键。任务和触发器的键(JobKey和TriggerKey)允许将它们放入'groups'中,这对组织作业和触发器可以用于“reporting jobs”和“maintenance jobs”等类别非常有用。任务或触发器的键名称部分在组中必须是唯一的 - 换句话说,作业或触发器的完整键(或标识符)是name和group的组合。
您现在对工作和触发器有什么总体概念,您可以在第3课:关于工作和工作详情以及第4课:关于触发器的更多信息中了解更多信息。