回到顶部

Quartz.NET 2.x 文档翻译 - Lesson 2:Jobs 和 Triggers

时间:2年前   作者:请喊我大龙哥   浏览:193   [站内原创,转载请注明出处]

Quartz.NET 2.x 文档翻译 - Lesson 2:Jobs 和 Triggers 查看官网原文

返回目录

The Quartz API

Quartz API 的接口和类主要有:

  1. IScheduler - scheduler调度的主要接口api
  2. IJob - scheduler调度执行job需要实现的接口api
  3. IJobDetail - 用来定义jobs的实例
  4. ITrigger - 定义需要执行的job的调度构成
  5. JobBuilder - 用于定义/创建job的明细情况,定义job的实例
  6. TriggerBuilder - 用于定义/创建Trigger的实例

下面主要用到的关键词术语有:IScheduler 和 Scheduler,IJob 和 Job,IJobDetail 和 JobDetail,ITrigger 和 Trigger.。

一个Scheduler调度的生命周期开始于它的创建,结束于它的关闭,这些都是通过SchedulerFactory 实现的。当我们创建了IScheduler接口后,我们就可以用来add、remove、或者list jobs和triggers,或者是其他与调度相关的工作。但是需要注意的是,我们必须首先start调度,否则job和trigger都是不会开始工作的。

quartz提供了“builder”类,用于定义一个域的特定语言。上一章有一个简单的demo代码:

// 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(40)
    .RepeatForever())            
  .Build();
  
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);

这段代码使用JobBuilder创建了一个job定义,同样的IJobDetail代码块用TriggerBuilder 创建了trigger的定义,同时定义了方法的特定type类型。schedule 调度的方法有:

  1. WithCalendarIntervalSchedule
  2. WithCronSchedule
  3. WithDailyTimeIntervalSchedule
  4. WithSimpleSchedule

使用DateBuilder可以轻松的构建特定的执行时间点等,如下个小时、十点钟、或者是其他的具体时间方式。

Jobs and Triggers

一个job就是一个实现了IJob接口的类,如下为IJob接口的唯一方法:

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

当 Job的trigger被触发后,Execute方法就会被scheduler调度的线程请求,JobExecutionContext包含运行环境参数等信息 被传递给execute方法用于Scheduler调度执行job实例任务,一个trigger触发器被触发执行此job任务。

JobDetail 对象是由Quartz.NET客户端程序(就是你创建的项目)将job被添加到scheduler调度的时候创建的。它包含了job的各种属性设置信息,好比一个job的数据地图一样,它存储了job实例的状态信息等。这其实就是job实例的定义信息,在下一章我们在细聊。

Trigger对象是用于job任务的执行触发。当我们想要schedule调度一个job任务的时候,需要实例化一个Trigger然后配置好属性参数用于执行我们想要的调度。Trigger也许也有类似的数据地图,用于将参数信息传递给job任务当Trigger被触发的时候。Quartz 包含了很多的Trigger触发类型,但是经常用到的类型是SimpleTrigger(ISimpleTrigger接口CronTrigger(ICronTrigger接口

SimpleTrigger很容易实现一次性的job执行配置(就是在单一事件执行一次job任务),或者是在你需要执行的时间点执行并重复N次,只需要设置好执行间隔时间即可。CronTrigger主要用于特定时间点或者周期性质的执行间隔,如每周一或者每个月的第四天等等。

为什么使用job和Trigger这样分开独立的方式?很多的schedulers调度job作业并没有job和Trigger的概念。有些定义一个job仅仅是用来执行一个时间点job的标示而已。其他的则更像是quartz job的合集。然而在我们开发Quartz的时候,认为分离schedule调度和work工作还是很有必要的,有很多的好处。

比如说:job可以创建并存储在独立的scheduler调度中并Trigger触发,许多的Trigger触发器都可以触发相同的job任务。这种松耦合的另外一个好处就是相关Trigger触发器过期后,配置在scheduler调度中的job任务任然是可以使用的,这样这些job任务仍然可以继续被scheduler调度使用,而不需要我们重新定义新的job任务,我们还可以修改或者替换Trigger触发器来继续工作而不需要去重新定义新的job任务。

Identities

job和Trigger是有各自的识别key值注册在quartz的scheduler调度中的。这些job任务的key和Trigger触发器的key是可以放到一个group组的,这样我们就可以实现一个类别的组任务集合,比如一个汇报工作的组任务等等。

到目前为止,我们就了解了什么是job任务和Trigger触发器了,在第三章和第四章将会讲解更多相关内容。

返回目录

请喊我大龙哥最后编辑于:2年前

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。