原文地址: http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/tutorials/tutorial-lesson-02.html
第二课: Quartz API ,Jobs[任务] 和 Triggers[触发器]
Quartz API 的关键接口:
- Scheduler - 任务调度的主要API
- Job - 基于组件实现的接口,通过任务调度实现你想要的执行
- JobDetail -用于定义Jobs的实例
- Trigger - 一个组件,用于定义一个指定Job的任务调度怎样被执行。
- JobBuilder - 用于定义/构建 JobDetail 实例,(JobDetail) 定义 Jobs 实例。
- TriggerBuilder - 用于定义/构建触发器实例.
一个任务调度的生命周期总是开始于通过SchedulerFactory
创建,终结于它的 shutdown() 方法。
一旦创建了Scheduler
接口,就可以使用它添加、删除和列出作业和触发器,并且执行其他任务调度相关的操作(如暂停一个触发器)。然而,任务调度在调用start() 方法开始之前,不会被触发器触发执行job,如第一课的展示。
Quartz 提供"builder" 类去定义领域特定语言(或 DSL,同样有时会被称为流接口)。在之前的课程你已经看到它的例子,我们在这里再呈现一部分:
// 定义一个 job 并绑定到我们的 HelloJob 类
JobDetail job = newJob(HelloJob.class)
.withIdentity("myJob", "group1") // 名称 "myJob", 组别 "group1"
.build();
// 触发 job 立刻还行,每40秒执行
Trigger trigger = newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
// 告诉 quartz 任务调度使用我们的 trigger
sched.scheduleJob(job, trigger);
构建作业定义的代码块使用的是从JobBuilder
类静态导入的方法。同样地,构建触发器的代码使用的是从TriggerBuilder
导入的方法,SimpleScheduleBuilder·
也是。
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 实例(正如表示下一个整数时间的date,换个说法就是,如果现在是 9:43:27 ,那么指定10:00:00)
任务 和 触发器
一个任务是一个 Job
接口的实例,仅又一个简单的方法:
Job 接口
package org.quartz;
public interface Job {
public void execute(JobExecutionContext context)
throws JobExecutionException;
}
当任务的触发器触发时(稍后再详述),exectue(...) 方法被一个执行调度的工作线程调用。JobExecutionContext
对象传递给这个方法提供带有运行环境信息的任务实例-执行它调度的句柄,触发执行的触发器句柄,任务的 JobDetail 对象,还有一些项。
JobDetail 对象由 Quartz 客户端(你的程序)在任务被加到任务调度时创建。它包含各种不同的任务属性设置,好像 JobDataMap ,可以用来用于存储 Job 类的给定实例的状态信息。它基本上是定义了job实例,更详细讨论留在下一课。
Trigger 对象用来触发任务的执行(发射)。当你安排一个任务,你实例化一个触发器并且调整他的属性提供给你希望的调度。触发器可能同样有一个 JobDataMap 与他们关联- 用来传递参数给一个任务用来指定触发器的点燃。Quartz有几种不同的触发来写,单最常用的是 SimpleTrigger
和 CronTrigger
。
SimpleTrigger
很易用,如果你只是需要一次性的执行(仅仅在一个指定时间单次执行),或者你需要点燃一个任务在一个给定的时间,并重复 N 次,伴随 延迟 T 在执行之间。CronTrigger
对于你想要基于日历类似的调度很有用,好像"每个星期五,在中午"或者“在10:15 在每个月的10号”。
为什么是任务和触发器?很多任务调度没有分离任务和触发器的观念。有一些定义一个'任务'只是简单地一个执行时间(或者安排) 顺着一些简单的工作标识。其他的更多像 Quartz的任务 和触发对象的联合。在开发 Quzrtz时,我们决定更合理去创造一个任务调度与任务调度要完成的工作。这样有(在我们看来)更多好处。
举例,任务可以独立于触发器被创建并存储在任务调度中,并且多个触发器可以关联同样的任务。这种松耦合的另一个好处是能够配置任务在相关触发器过期后保留在调度器中,因而可以晚点再重新调度,而不需要重新定义它。它还允许您修改或替换触发器,而不必重新定义其关联的作业。
特性
任务和触发器会被给予识别键当他们注册到Quartz调度。Jobs 和 Triggers的键(JobKey 和 TriggerKey)允许将它们放入组中,这对于组织作业非常有用,并将触发器分为报告作业和维护作业等类别。作业或触发器的键的名称部分在组中必须是唯一的-换句话说,作业或触发器的完整键(或标识符)是名称和组的组合。
你现在对于Jobs 和 Triggers 已经有一个大概的概念,可以学习到更多关于他们的内容在第三课: 关于 Jons 和 J偶读Detail的更多内容 和第四课: 更多关于触发器的内容。
本文由博客一文多发平台 OpenWrite 发布!