,,Quartz.Net任务和触发器实现方法详解

,,Quartz.Net任务和触发器实现方法详解

本文主要介绍Quartz.Net任务和触发器实现方法的详细讲解,通过实例代码详细介绍,对大家的学习或工作有一定的参考价值,有需要的朋友可以参考一下。

Quartz API

Quartz API的主要接口和类如下:

is scheduler-与调度器交互的主API ijob调度器将执行实现该接口的实例iJobDetail用于定义任务的实例iTrigger用于定义任务执行调度的组件JobBuilder用于定义/构造job detail的实例,其中job detail的实例定义了Jobs TriggerBuilder的实例-用于定义/构造触发器的实例。

在本文中,为了便于阅读,以下语句是可以互换的:ischedule和Scheduler、IJob和Job、IJobDetail和JobDetail、ITrigger和

Trigger.

调度程序的生命周期从SchedulerFactory创建它时开始,到调用它的Shutdown()方法时结束。在实现了IScheduler之后,您可以使用添加、删除、列出任务和触发器,或者其他与调度相关的操作(例如暂停触发器)。然而,正如在第1课中提到的,调度程序不会真正触发任务触发器(执行任务),直到调用Start()方法来启动它。

Quartz提供了一个被定义为特定领域语言(DSL,有时称为“流畅接口”)的“构建器”类。在上一课中,您看到了一个例子。在这里,我们将再次看到其中的一些。

//定义作业并将其绑定到我们的HelloJob类

IJobDetail job=JobBuilder。CreateHelloJob()。WithIdentity('myJob ',' group1') //name 'myJob ',group 'group1 '。build();

//触发作业立即运行,然后每隔40秒运行一次

ITrigger trigger=TriggerBuilder。创建()。WithIdentity('myTrigger ',' group1 ')。StartNow()。WithSimpleSchedule(x=x。在间隔秒内(40)。RepeatForever())。build();

//告诉quartz使用我们的触发器来调度作业

await sched.scheduleJob(作业,触发器);

在这段代码中,当JobBuilder用于定义job时,stream接口用于构建IJobDetail。同样,当使用TriggerBuilder定义触发器时,会用到返回触发器类型的流程接口和扩展方法。可用的调度扩展方法有:

withcalendaintervalschedulewithcronschedulewithdailytimeintervalschedulewithsimpleschedule

DateBuilder类提供了多种方法来构造DateTimeOffset实例,以指定特定的时间点(例如,指定下一个小时的时间——换句话说,如果现在是9:43:27,则指定的时间是10:00:00)。

Jobs and Triggers

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

IJob 接口

命名空间石英

{

公共接口作业

{

任务执行(JobExecutionContext上下文);

}

}

当任务的触发器被触发时,调度器的一个工作线程将调用Execute(.)方法。传递给此方法的jobExecutionContext对象提供了一个包含其“运行时”环境信息的作业实例,其中包括访问执行它的调度程序的句柄、触发此操作的触发器的句柄、任务的JobDetail对象以及其他一些信息。

当Quartz.NET客户端(您的程序)向调度程序添加任务时,会生成JobDetail对象。它包括各种作业属性,并提供JobDataMap,可以存储作业类实例的状态信息。这是作业实例的本质,将在下一节中更详细地描述。

触发器用于触发任务的执行。当您想要调度一个任务时,您应该实例化一个触发器并“调整”其属性以满足您想要的调度。触发器还可以有与之关联的JobDataMap对象,这对于向任务传递参数非常有用。Quartz提供了几种不同类型的触发器,但使用最广泛的是SimpleTrigger(ISimpleTrigger接口)和CronTrigger(ICronTrigger接口)。

如果你需要一个“一次性”的操作(在指定的时间只有一个操作),或者你需要在指定的时间执行一个任务,并且在延迟的时间执行n次,那么使用SimpleTrigger是非常方便的。如果你根据类似日历的时间表触发任务,比如“每周五中午”或者“每个月的第10天10: 15”,那么CronTrigger就非常有用。

为什么要分开使用任务和触发器?许多任务调度器没有独立任务和触发器的概念。其中一些只是用简单的任务标识符将一个“任务”定义为一个执行时间(调度),而另一些则非常类似于Quartz的集成任务和触发器的概念。在开发Quartz时,我们决定将计划与计划中执行的工作分开是非常有意义的。这有很多好处(我们认为)。

例如,任务可以独立于触发器创建并存储在任务计划中,并且多个触发器可以与同一任务相关联。低耦合的另一个优点是,您可以配置相关触发器已经过期但仍在调度程序中的任务,这使得以后可以再次调度它们而无需重新定义它们。这也允许您修改或替换触发器,而无需重新定义与之相关联的任务。

Identities

当向Quartz scheduler注册时,任务触发器可以被赋予标识键。JobKey和TriggerKey使它们能够被分组,便于对你的任务和触发器进行分类和规划,比如“报表任务”和“维护任务”。同一组中的任务和触发器的名称属性必须唯一。换句话说,任务和触发器的完整键(ID)即名称和组的组合是唯一的。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: