Quartz 第二课 Jobs and Triggers(官方文档翻译)

The Quartz API

  1. IScheduler—与scheduler交互的主要的接口

  2. IJob—这个接口主要定义scheduler执行内容

  3. IJobDetail—用于定义Jobs实例

  4. ITrigger—定义scheduler怎么去执行Job

  5. JobBuilder –用于定义构建JobDetail实力,哪个定义为Jobs的实例

  6. TriggerBuilder—用于定义和构建Trigger 实例

为了更好的可读性,以下术语交替使用: IScheduler and Scheduler, IJob and Job, IJobDetail and JobDetail, ITrigger and Trigger.

Scheduler的生命周期是从它创建开始通过SchedulerFactory 到调用 Shutdown()后结束。一旦Scheduler被创建,就可以调用add和remove方法来添加和移除Jobs和Triggers以及其它调度相关的操作(例如暂停trigger)。如果没有调用 Start()方法,Scheduler并不会在任何triggers 下执行任何jobs。

Quartz定义一种自己的特定语言格式(称为DSL或者是fluent interface)在上一节中已经看见这么使用它的例子,让我们再看一次。

 1 // define the job and tie it to our HelloJob class
 2     IJobDetail job = JobBuilder.Create<HelloJob>()
 3         .WithIdentity("myJob", "group1") // name "myJob", group "group1"
 4         .Build();
 5
 6     // Trigger the job to run now, and then every 40 seconds
 7     ITrigger trigger = TriggerBuilder.Create()
 8         .WithIdentity("myTrigger", "group1")
 9         .StartNow()
10         .WithSimpleSchedule(x => x
11             .WithIntervalInSeconds(40)
12             .RepeatForever())
13         .Build();
14
15     // Tell quartz to schedule the job using our trigger
16     sched.scheduleJob(job, trigger)

在构建Job的代码块的时候使用JobBuilder ,使用fluent interfac创建这个接口IJobDetail。同样构建trigger代码块使用TriggerBuilder’s 的fluent interface并调用扩展方法指定trigger 类型。可用得时间延长方法有:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

DateBuilder 类中包含了各种方便构建DateTimeOffset 实例的方法。(例如表示一个偶数的小时换个具体点时间10:00:00当前是9:43:27)

Jobs and Triggers

Job实现IJob 接口,接口里面仅有一个简单的方法

IJob Interface

1 namespace Quartz
2     {
3         public interface IJob
4         {
5             void Execute(JobExecutionContext context);
6         }
7 }

当trigger 触发时,scheduler’的线程调用Execute()方法。 JobExecutionContext 对象提供了Job实例以及运行时的环境信息由Scheduler 去执行,一个Trigger 被触发对于此次执行还包含JobDetail 对象以及其它项。

当scheduler添加一个Job的时候,scheduler会创建JobDetail 对象。它包含了Job的各种属性设置,作为一个JobDataMap保存,它可以用来存储状态信息为Job实例。它本质上是作业job的定义。细节在下一节课进行了讨论。

触发对象用于触发Job的执行。当您希望执行一个job,你实例化一个trigger 和‘调‘其属性为您希望调度。触发器也可能有一个与之相关的JobDataMap的 - 这是将参数传递给job特定于触发器的发用的。Quartz 附带常用的trigger 类型,,最常用的类型有SimpleTrigger(ISimpleTrigge接口r)和CronTrigger(ICronTrigger接口)。

SimpleTrigger是最方便的,如果你需要‘一次性‘执行(在给定时刻的job只是单一的执行),或者如果你需要在给定时间工作,并将其重复N次,延迟T执行之间。如果您希望基于日历般的时间触发CronTrigger是有用的 - “每月10日10:15”,“每个星期五,中午”。

为什么要有jobs和Triggers呢?许多 job schedulers并没有 jobs and triggers概念。一些定义“job”作为简单地用一些小job标识符沿执行时间(或计划)。其他人则很像Quartz’s job and trigger 对象集合。在开发Quartz,我们认为这是有意义的创建要在这个时间表执行的时间表和工作之间的分离。这样做(在我们看来)很多好处。

例如,Jobs可以被创建并能独立存储在 job scheduler,并且许多triggers 可以用相同的job相关联。这种松耦合的另一个好处是配置留在调度之后它们相关的触发器已过期,所以它可在以后重新安排的job,而不必重新定义它。它也可以让你无需重新定义其关联的job修改或替换Tirgger。

Identities

Jobs和tirggers容许在注册到Quartz scheduler定义key。这些key是很有用的在组织管理jobs和tirggers。对于组key相同的jobs和tiggers被包含在一个组里。

时间: 2024-08-11 01:19:53

Quartz 第二课 Jobs and Triggers(官方文档翻译)的相关文章

Quartz 第三课 More About Jobs &amp; JobDetails(官方文档翻译)

当学完第二课之后,你欣喜的发现,让jobs工作起来是还是相当简单的.虽然让jobs运行起来很简单,对于其执行的关键内容还是需要知道的.它们是IJob接口中的Execute和JobDetails. 当你定义一个实现IJob接口的类的时候,你需要在里面实现实际需要执行的代码.Quartz.NET需要知道关于这代码的各种信息,这样 Quartz.NET才能像你期望的那样工作.这些细节是在JobDetail类中进行了描述,在上一节以及进行了简单的描述. JobDetail由JobBuilder进行实例化

Quartz学习 之 Jobs 和 Triggers

一个任务是一个实现了 Job 接口的类.和下面展示一样,Job接口只有一个方法. package org.quartz; public interface Job { public void execute(JobExecutionContext context) throws JobExecutionException; } 当一个 Job 的触发器被触发, 调度器就会从线程池中拿一个线程来调用 execute(..)方法. 方法有一个参数 JobExecutionContext  conte

Quartz.NET c# 教程 - 课程二:Jobs 和 Triggers

Quartz API The key interfaces and classes of the Quartz API are: Quartz API 的主要接口和类如下: IScheduler - 和 Scheduler 交互的主要接口. IJob - 自定义的执行模块所要继承的接口, scheduler 会调用这个实现该接口的模块. IJobDetail - 用来定义 Job 实例. ITrigger - 用来定义 schedule 的模块, 根据该模块中的 schedule 来决定哪个 j

[译]Quartz.NET 框架 教程(中文版)2.2.x 之第四课 更多关于Triggers

第四课 更多关于Triggers 跟作业任务类似,触发器也非常容易使用,但是在你能够充分掌握Quartz之前,你需要知道并理解许多触发器的客户化的参数.前面已经提到过,有许多不同类型的触发器供你选择,适用不同的调度需求. 你将会在第五课 Simple Trigger和第六课 Triggers学到这两种常用的触发器类型. 触发器通用属性 所有类型的触发器都有TriggerKey属性去跟踪触发器标识,除了这一个事实之外,还有许多其他的属性,对所有触发器类型都适用.这些通用属性在创建触发器定义时通过T

grails2.3.11第二课

第二课主要介绍grails相关插件的使用,这是敏捷开发所必需的途径. 可以把grails的插件看作是grails正常项目的迷你型,因为看插件的源码,它的目录结构和正常项目相差无几. 官方开源插件地址 https://grails.org/plugins 内部插件地址 http://maven.info.bit.edu.cn 主要介绍了常用的一些插件吧,每个插件的用法不尽相同,但是有一个共同点是要在BuildConfig.groovy这个配置文件里 compile 相关插件. 常用的包括: 前端插

【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做了介绍,也带大家配置了SDL的开发环境.请大家按照上一课的步骤创建一个SDL工程,能够初步运行. 如果遇到问题,可以百度,Google相关平台SDL的配置.或者联系小编. 当然了,有些朋友可能会说开发C语言游戏还可以用GTK+这个库,但是个人认为GTK+没有SDL那么适合开发游戏,其创建图形界面的能

Alljoyn瘦客户端库介绍(官方文档翻译)

Alljoyn瘦客户端库介绍(1) 1.简介 本文档对AllJoynTM瘦客户端的核心库文件(AJTCL)进行了详尽的介绍.本文档介绍了系统整体架构,AllJoyn框架结构,并着重于介绍如何将嵌入式设备加入AllJoyn系统整体架构中.1.1目的 本文档介绍了如何使一个受限于功耗.计算能力和内存的设备(嵌入式设备)加入AllJoyn分布式系统.具体而言,本文档包括了对AllJoyn面向嵌入式系统的方面的介绍,并着重描述了基于AllJoyn的系统的各个组件是如何与嵌入式设备协作以构建一个基于接近式

Oracle 12c 12.1.0.1.0管理控制文件官方文档翻译说明

Link: http://download.csdn.net/detail/rlhua/7718571 官方Link: http://docs.oracle.com/database/121/ADMIN/control.htm#ADMIN006 版本: [email protected]>select * from v$version; BANNER                                                                          

官方文档翻译:Innodb的锁

InnoDB Record, Gap, and Next-Key Locks 考虑到翻译准确性,对于某些特殊名称不做翻译,以免误导: InnoDB has several types of record-level locks including record locks, gap locks, and next-key locks. innodb 有几种行锁类型,包括,record locks(记录锁),gap locks(间隙锁),and next-key locks(组合). Record