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)在上一节中已经看见这么使用它的例子,让我们再看一次。

 // define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob", "group1") // name "myJob", group "group1"
.Build(); // Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds()
.RepeatForever())
.Build(); // Tell quartz to schedule the job using our trigger
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

 namespace Quartz
{
public interface IJob
{
void Execute(JobExecutionContext context);
}
}

当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被包含在一个组里。

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

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

    当学完第二课之后,你欣喜的发现,让jobs工作起来是还是相当简单的.虽然让jobs运行起来很简单,对于其执行的关键内容还是需要知道的.它们是IJob接口中的Execute和JobDetails. 当你 ...

  2. [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介

    第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...

  3. Quartz.NET总结(六)了解Jobs 和 Triggers

    前面讲了一些Quartz.net 的一些东西, http://www.cnblogs.com/zhangweizhong/category/771057.html 但是发现有一些基础的东西,没有说到. ...

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

    第四课 更多关于Triggers 跟作业任务类似,触发器也非常容易使用,但是在你能够充分掌握Quartz之前,你需要知道并理解许多触发器的客户化的参数.前面已经提到过,有许多不同类型的触发器供你选择, ...

  5. grails2.3.11第二课

    第二课主要介绍grails相关插件的使用,这是敏捷开发所必需的途径. 可以把grails的插件看作是grails正常项目的迷你型,因为看插件的源码,它的目录结构和正常项目相差无几. 官方开源插件地址 ...

  6. omnet++:官方文档翻译总结(二)

    这一部分是官方案例介绍 1.Introduction 学习自:Introduction - OMNeT++ Technical Articles 本教程是基于Tictoc的仿真案例,这些案例我们可以在 ...

  7. GreenDao官方文档翻译(上)

    笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...

  8. Aircrack-ng官方文档翻译[中英对照]---Airmon-ng

    Aircrack-ng官方文档翻译---Airmon-ng Description[简介] This script can be used to enable monitor mode on wire ...

  9. Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng

    Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...

随机推荐

  1. C++ 动态创建对象

    转自:http://www.cnblogs.com/jisi5789/p/3190353.html 回顾前面的文章,实现了一个简单工厂模式来创建不同类对象,但由于c++没有类似new "Ci ...

  2. Ubuntu 15.04下MySQL 5.6.25不支持中文解决办法

    Ubuntu 15.04下MySQL 5.6.25不支持中文解决办法,apt-get install 安装的,不是源码包安装的mysql. 1 修改mysql的配置文件 /etc/mysql/conf ...

  3. BZOJ 3505: [Cqoi2014]数三角形 数学

    3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  4. 纯Javascript实现Windows 8 Metro风格实现

    Metro风格设计主要特点 1.Windows 8 Metro风格设计,实现网站或系统功能的导航 2.纯Javascript实现 3.支持所有IE.360.Chrome等常用浏览器 4.支持圆角.阴影 ...

  5. IT人才什么最重要

    做人最重要 做人最主要的一条就是尊重别人 不尊重别人,一般都是产生于自己认为自己别别人强,认为别人总是犯一些非常二的错误,于是就不自觉的通过言语.表情.反应等一些细节流露出来 这种人时间长了就会没人愿 ...

  6. 几种server模型

    TCP測试用客户程序 每次执行客户程序,在命令行參数指定server的ip地址,port,发起连接的子进程数,和一个待发送的字符串数据,客户程序将模拟多个客户依据指定的子进程数创建子进程来并发的连接到 ...

  7. 【虚拟化实战】VM设计之一vCPU

    作者:范军 (Frank Fan) 新浪微博:@frankfan7 虚拟机需要多少个vCPU呢?是不是个数越多性能越好呢?这方面存在着很多误区.给VM配置CPU资源的时候,要精打细算才能最大可能的利用 ...

  8. MongoDB 主从复制小实验

    MongoDB 主从复制小实验 操作环境描述:WIN8  64位操作系统,内装虚拟机为CentOS 5.5 32位系统. 操作描述:跟其他关系型数据库类似,在主库进行数据操作,将数据同步到从节点,从节 ...

  9. Android 滑动效果高级篇(七)—— 华丽翻页效果

    By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前看到像ipad上的ibook的模拟书籍翻页的特效感觉很炫,在android上也有像laputa和ireader ...

  10. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...