Quartz官方教程翻译系列-Lesson 2

原文地址: 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有几种不同的触发来写,单最常用的是 SimpleTriggerCronTrigger

SimpleTrigger 很易用,如果你只是需要一次性的执行(仅仅在一个指定时间单次执行),或者你需要点燃一个任务在一个给定的时间,并重复 N 次,伴随 延迟 T 在执行之间。CronTrigger 对于你想要基于日历类似的调度很有用,好像"每个星期五,在中午"或者“在10:15 在每个月的10号”。

为什么是任务和触发器?很多任务调度没有分离任务和触发器的观念。有一些定义一个'任务'只是简单地一个执行时间(或者安排) 顺着一些简单的工作标识。其他的更多像 Quartz的任务 和触发对象的联合。在开发 Quzrtz时,我们决定更合理去创造一个任务调度与任务调度要完成的工作。这样有(在我们看来)更多好处。

举例,任务可以独立于触发器被创建并存储在任务调度中,并且多个触发器可以关联同样的任务。这种松耦合的另一个好处是能够配置任务在相关触发器过期后保留在调度器中,因而可以晚点再重新调度,而不需要重新定义它。它还允许您修改或替换触发器,而不必重新定义其关联的作业。

特性

任务和触发器会被给予识别键当他们注册到Quartz调度。Jobs 和 Triggers的键(JobKey 和 TriggerKey)允许将它们放入组中,这对于组织作业非常有用,并将触发器分为报告作业和维护作业等类别。作业或触发器的键的名称部分在组中必须是唯一的-换句话说,作业或触发器的完整键(或标识符)是名称和组的组合。

你现在对于Jobs 和 Triggers 已经有一个大概的概念,可以学习到更多关于他们的内容在第三课: 关于 Jons 和 J偶读Detail的更多内容 和第四课: 更多关于触发器的内容。

本文由博客一文多发平台 OpenWrite 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容