Quartz.NET-课程2:作业和触发器

这是翻译的官方教程,英语水平好的可以直接看官方原文:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/using-quartz.html

Quartz API

Quartz API的关键接口和类是:

  • IScheduler - 与调度程序交互的主要API。
  • IJob - 您希望由调度程序执行的组件实现的接口。
  • IJobDetail - 用于定义作业的实例。
  • ITrigger - 定义执行给定Job的时间表的组件。
  • JobBuilder -用于定义/构建定义作业实例的JobDetail实例。
  • TriggerBuilder - 用于定义/构建触发器实例。

在本教程中,为了便于阅读,以下术语可以互换使用:IScheduler和Scheduler,IJob和Job,IJobDetail和JobDetail,ITrigger和Trigger。

一个调度程序的生命周期是从通过SchedulerFactory定义开始到调用Shutdown()方法结束。一旦创建了IScheduler接口,就可以使用添加,删除和列出作业和触发器,并执行其他与调度相关的操作(例如暂停触发器)。但是,如第1节所示,调度程序实际上不会对任何触发器(执行作业)执行操作,直到使用Start()方法启动。

Quartz提供定义域特定语言(或DSL,有时也称为“流畅接口”)的“构建器”类。现在介绍一下前一节例子的部分内容:

// 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
await sched.scheduleJob(job, trigger);

构建作业定义的代码块使用JobBuilder的fluent interface的实例化IJobDetail。同样,构建触发器的代码块使用TriggerBuilder的fluent interface和特定于特定触发器类型的扩展方法。可能的时间延长方法是:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

DateBuilder类包含各种方法,用于为特定的时间点(比如当前为9:43:27 则下一个偶数的小时的时间-10:00:00)轻松构建DateTimeOffset实例。

作业和触发器

Job是一个实现IJob接口的类,它只有一个简单的方法:

IJob接口

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

当作业的触发器触发时(稍后更多),Execute(…)方法由其中一个调度程序的工作线程调用。传递给此方法的JobExecutionContext对象为作业实例提供有关其“运行时”环境的信息 - 执行它的调度程序的句柄,触发执行的触发器的句柄,作业的JobDetail对象以及其他几个项目。

JobDetail对象是在Job添加到调度器时由Quartz.NET客户端(您的程序)创建的。它包含Job的各种属性设置,以及一个JobDataMap,它可以用来存储作业类的给定实例的状态信息。它基本上是作业实例的定义,并在下一节中进一步详细讨论。

触发器对象用于触发作业的执行(或“触发”)。当你希望安排一项工作时,你可以实例化一个触发器并“调整”它的属性以提供你想要的安排。触发器也可能有一个与它们相关的JobDataMap - 这对于将参数传递给特定于触发器触发的Job是很有用的。Quartz提供了一些不同的触发器类型,但最常用的类型是SimpleTrigger(接口ISimpleTrigger)和CronTrigger(接口ICronTrigger)。

如果您需要“一次性”执行(在某个特定时间只执行一项作业),或者如果您需要在给定时间启动作业,并重复执行N次,SimpleTrigger会很方便的在这段时间执行。如果您希望根据类似日历的时间表进行触发,例如“每个星期五,中午”或“每个月的第10天的10:15”,则CronTrigger非常有用。

为什么用作业和触发器?许多作业调度者没有单独的作业和触发器概念。一些人将’工作’定义为执行时间(或作业)以及一些小型工作标识符。其他很像Quartz的工作和触发对象的结合。在开发Quartz的过程中,我们决定在作业表(schedule)和要在该作业表(schedule)上执行的工作之间进行区分是有意义的。这(在我们看来)有很多好处。

例如,可以独立于触发器创建作业并将其存储在作业调度程序中,并且许多触发器可以与同一作业相关联。这种松散耦合的另一个好处是能够配置调度程序在其关联的触发器过期后保留的作业,以便稍后重新调度它,而不必重新定义它。它还允许您修改或替换触发器,而无需重新定义其关联作业。

身份

作业和触发器在向Quartz调度器注册时给出标识键。作业和触发器的键(JobKey和TriggerKey)允许它们被放置到“组”中,这可以用于组织作业和触发器,例如“报告作业”和“维护作业”等类别。作业或触发器的键名称部分在组内必须是唯一的

  • 换句话说,作业或触发器的完整密钥(或标识符)是名称和组的组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值