quarzt(官方)---给自己看的文档(作业和触发器)

第2课:Quartz API,作业和触发器

Quartz API

Quartz API的关键接口是:

  • 调度程序 - 与调度程序进行交互的主要API。
  • 作业 - 由希望由调度程序执行的组件实现的接口。
  • JobDetail - 用于定义作业的实例。
  • 触发器 - 定义执行给定作业的计划的组件。
  • JobBuilder - 用于定义/构建JobDetail实例,它定义了作业的实例。
  • TriggerBuilder - 用于定义/构建触发器实例。

调度程序的生命周期受其创建的限制,通过SchedulerFactory和对其shutdown()方法的调用。 创建Scheduler界面后,可以使用添加,删除和列出作业和触发器,并执行其他与调度相关的操作(例如暂停触发器)。 但是,如第1课所示,调度程序将不会对任何触发器(执行作业)起作用,直到start()方法启动为止。

Quartz提供了定义域特定语言(或DSL,有时也称为“流畅界面”)的“构建器”类。 在上一课中,您看到了一个例子,我们再次介绍一部分:


// 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界面的类,它只有一个简单的方法:

作业界面

  package org.quartz;

  public interface Job {

    public void execute(JobExecutionContext context)
      throws JobExecutionException;
  }
 

当Job的触发器触发(稍后更多)时,执行(..)方法由调度程序的一个工作线程调用。 传递给此方法的JobExecutionContext对象向作业实例提供有关其“运行时”环境的信息 - 执行它的计划程序的句柄,触发执行的触发器的句柄,作业的JobDetail对象以及少数其他项目。

JobDetail对象由Quartz客户端(您的程序)在作业添加到调度程序时创建。 它包含Job的各种属性设置,以及JobDataMap ,可用于存储作业类的给定实例的状态信息。 它基本上是作业实例的定义,并在下一课中进一步详细讨论。

触发对象用于触发作业的执行(或“触发”)。 当您要安排作业时,您会实例化一个触发器并调整其属性以提供您希望拥有的计划。 触发器也可以具有与它们相关联的JobDataMap - 这对于将参数传递给特定于触发器触发的作业很有用。 石英船有少量不同的触发类型,但最常用的类型是SimpleTrigger和CronTrigger。

如果您需要“单次执行”(在给定时刻只需单次执行作业),或者如果您需要在给定时间点火作业,并且延迟重复N次,那么SimpleTrigger会很方便执行之间的T。 如果您希望根据类似日历的时间表进行触发,例如“每周五,中午”或“每月10日10:15”,CronTrigger将非常​​有用。

为什么工作和触发器? 许多作业调度程序没有单独的作业和触发器概念。 一些将“作业”定义为简单的执行时间(或时间表)以及一些小的作业标识符。 其他人就像Quartz的工作和触发对象的联合。 在开发Quartz的过程中,我们决定在时间表和在该时间表上执行的工作之间建立分隔是有意义的。 这在我们看来有很多好处。

例如,作业可以独立于触发器创建和存储在作业计划中,并且许多触发器可以与相同的作业相关联。 这种松散耦合的另一个好处是能够配置在相关联的触发器过期后保留在调度程序中的作业,以便稍后重新安排它,而无需重新定义它。 它还允许您修改或替换触发器,而无需重新定义其关联的作业。

身份

作业和触发器被赋予标识键,因为它们已经注册到Quartz调度程序。 作业和触发器(JobKey和TriggerKey)的键允许将它们放入“组”,这对于将您的作业和触发器组织成诸如“报告作业”和“维护作业”等类别很有用。 作业或触发器的键的名称部分在组中必须是唯一的,或者换句话说,作业或触发器的完整键(或标识符)是名称和组的组合。

posted @ 2017-03-22 15:31  liutiantian  阅读(667)  评论(0)    收藏  举报