Quartz 第二课 Jobs and Triggers(官方文档翻译)
The Quartz API
IScheduler—与scheduler交互的主要的接口
IJob—这个接口主要定义scheduler执行内容
IJobDetail—用于定义Jobs实例
ITrigger—定义scheduler怎么去执行Job
JobBuilder –用于定义构建JobDetail实力,哪个定义为Jobs的实例
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(官方文档翻译)的更多相关文章
- Quartz 第三课 More About Jobs & JobDetails(官方文档翻译)
当学完第二课之后,你欣喜的发现,让jobs工作起来是还是相当简单的.虽然让jobs运行起来很简单,对于其执行的关键内容还是需要知道的.它们是IJob接口中的Execute和JobDetails. 当你 ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介
第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...
- Quartz.NET总结(六)了解Jobs 和 Triggers
前面讲了一些Quartz.net 的一些东西, http://www.cnblogs.com/zhangweizhong/category/771057.html 但是发现有一些基础的东西,没有说到. ...
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第四课 更多关于Triggers
第四课 更多关于Triggers 跟作业任务类似,触发器也非常容易使用,但是在你能够充分掌握Quartz之前,你需要知道并理解许多触发器的客户化的参数.前面已经提到过,有许多不同类型的触发器供你选择, ...
- grails2.3.11第二课
第二课主要介绍grails相关插件的使用,这是敏捷开发所必需的途径. 可以把grails的插件看作是grails正常项目的迷你型,因为看插件的源码,它的目录结构和正常项目相差无几. 官方开源插件地址 ...
- omnet++:官方文档翻译总结(二)
这一部分是官方案例介绍 1.Introduction 学习自:Introduction - OMNeT++ Technical Articles 本教程是基于Tictoc的仿真案例,这些案例我们可以在 ...
- GreenDao官方文档翻译(上)
笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...
- Aircrack-ng官方文档翻译[中英对照]---Airmon-ng
Aircrack-ng官方文档翻译---Airmon-ng Description[简介] This script can be used to enable monitor mode on wire ...
- Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng
Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...
随机推荐
- 在Android项目中使用AndroidAnnotations(配置框架,显示Hello World!)
使用这个框架可以极大的简化在开发Android过程中的代码.提高开发的效率.这里简单说一下配置方式.和使用办法. 项目的地址为:AndroidAnnotations Jar包下载地址:3.0.1 下载 ...
- ASP.NET MVC 3 入门级常用设置、技巧和报错
1.ASP.NET MVC 3 如何去除默认验证 这个默认验证是在web.config配置文件中设置的 <add key="ClientValidationEnabled&quo ...
- MyBatis之二:简单增删改查
这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> ...
- Android Service AIDL 远程调用服务 【简单音乐播放实例】
Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...
- 有图有真相,分享一款网页版HTML5飞机射击游戏
本飞机射击游戏是使用HTML5代码写的,尝试通过统一开发环境(UDE)将游戏托管在MM应用引擎,直接生成了网页版游戏,游戏简单易上手,非常适合用来当做小休闲打发时间. 游戏地址:http://flyg ...
- Exploring Python Code Objects
Exploring Python Code Objects https://late.am/post/2012/03/26/exploring-python-code-objects.html Ins ...
- 如何扩大VMware虚拟机的硬盘磁盘空间大小
首先,在虚拟机配置界面通过界面配置,直接扩大虚拟机硬盘大小: 而后,登陆虚拟机,在windows磁盘管理,更多操作中直接“重新扫描磁盘”,操作系统自动找到了多出来的磁盘空间: 最后,在老磁盘分区上通过 ...
- C#_ajax fileupload
@{ ViewBag.Title = "Index"; Layout = null; } <h2>Index</h2> <script src=&qu ...
- SSH框架整合面试题
1. 谈谈你mvc的理解MVC是Model-View-Controler的简称.即模型-视图-控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开.MVC中的模型.视图.控制器它们 ...
- dem30下载地址
http://www.gscloud.cn/listdata/listdata_new.shtml?from=&productId=311#Wzg4LFswLDEwLDEsMF0sW10sW1 ...