Quart 的 API

Quartz API 中的关键接口和类如下:

  • IScheduler—与调度器(scheduler)进行交互的主要 API;
  • IJob—被组件继承和实现,由调度器来执行的接口;
  • IJobDetail—通常被用于定义任务实例;
  • ITrigger—对于给定的任务定义出了它将被执行的时间序列的组件;
  • JobBuilder—通常用来定义(或创建) JobDetail 实例,此实例用于定义任务实例;
  • TriggerBuilder—通常用来定义(或创建)触发器实例。

在本教程中,为了提高可读性以下术语交替使用:IScheduler 和 Scheduler,IJob 和 Job,IJobDetail 和 JobDetail,ITrigger 和 Trigger。

调度器创建后的生命周期是有限的,通过调用调度工厂 (SchedulerFactory) 的 Shutdown() 方法可以关闭调度器。IScheduler 接口创建后即可进行任务和触发器的添加、删除以及列表操作,并且可以执行调度计划相关的其他操作 (例如暂停一个触发器)。然而,就像在《使用Quartz》中所讲的那样,只有在调用 Start() 方法之后调度器才会真正对触发器起作用 (执行任务)。

Quartz 提供的 “builder” 类定义了一种领域专用语言 (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
sched.scheduleJob(job, trigger);

上面的代码块展示了使用 JobBuilder 创建任务的定义并使用流接口创建了任务 (IJobDetail)。同样,使用针对给定触发器类型的 TriggerBuilder 的流接口和扩展方法创建了触发器。可能的时间计划扩展方法如下:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

DateBuilder 类包含的很多方法可以让我们很容易地构造特定时间点的 DateTimeOffset 实例 (例如代表下一个偶数小时的时间,换句话说就是如果现在是 9:43:27 那么它将返回 10:00:00)。

任务和触发器

任务就是实现了 IJob 的类,里面只有一个简单的方法:

IJob 接口:

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

当任务的触发器触发以后,调度器的一个工作线程将会调用 Execute(..) 方法。传递到这个方法的 JobExecutionContext 对象提供了一个任务实例,这个实例包含以下运行时环境:一个运行当前任务的调度器的句柄,触发当前任务的触发器的句柄,当前任务的 JobDetail 对象,以及其他几个对象。

调度器加载任务后 Quartz.NET 的客户端 (即我们的应用程序) 会创建 JobDetail 对象。这个对象包含了任务的各种属性设置,以及一个 JobDataMap——它可以用来存储指定任务类型的状态信息。JobDetail 是任务对象的本质,我们会在下一节更详细地讨论它。

触发器用来触发 (或者叫“点火”) 任务的执行操作。当你想要调度一个任务的时候,你需要初始化一个触发器并按照你想要的调度计划来调整它的属性。触发器也可能有一个关联的 JobDataMap,这对于向触发器触发操作指定的任务传递参数来说很有用。Quartz 附带了一些不同的触发器类型,但是通常情况下用的最多的是SimpleTrigger(接口是ISimpleTrigger) 以及 CronTrigger(接口是ICronTrigger)。

如果你需要在指定时间点仅执行一次,或者在指定时间内重复多次并且在每执行前延迟特定时间的任务,使用SimpleTrigger将会很方便。如果你想让触发器有类似于日历的调度计划,CronTrigger将会很合适,例如“每周五下午”或者“每个月第10天的10:15”。

为什么要有任务和触发器?很多任务调试工具都没有将触发器和任务的概念分离。一些组件简单地将任务当作附带一点任务标识的执行时间(或者计划)。还有一些组件很像是Quartz的任务和触发器的结合。但是当我们开发Quartz时, 我们决定将调度计划和在调度计划内将要执行的操作分离开。在我们看来这样做有很多好处。

例如:任务可以独立于触发器创建并存储到任务调度器中,并且可以将多个触发器关联到同一个任务上。另一个松耦合的好处是对于调度器中保留的任务,当与之关联的触发器过期之后,可以不用重新定义这个任务就对它再次进行调度安排;同样的你也可以修改或替换一个触发器而不用重新定义与它关联的任务。

标识

当任务和触发器在Quartz的调度器中注册时就分配了标识主键。任务和触发器的主键(JobKey 和TriggerKey)对于将其组织归并到某个分组并进行分类是非常有用的,例如将任务分为“报表任务”或“维护任务”。组内的任务或触发器的主键名称不能重复,换句话说即任务或触发器的名称以及组名结合在一起就是完整主键(或者标识)。

原文:《Lesson 2: Jobs And Triggers》

转载于:https://www.cnblogs.com/gb2013/p/quartz-jobs-and-triggers.html

(02) 任务(Jobs)和触发器(Triggers)相关推荐

  1. 老猿学5G:融合计费基于QoS流计费QBC的触发器Triggers

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器来控制的.在<老猿学5G: ...

  2. WPF 触发器Triggers

    这一篇,总结Triggers. FrameworkElement.Style.ControlTemplate和DataTemplate都具有一个类型为TriggerCollection 的Trigge ...

  3. Flink触发器Triggers

    触发器(Triggers) 触发器确定窗口(由窗口分配器形成)何时准备好由窗口功能处理.每个WindowAssigner都带有一个默认触发器.如果默认触发器不适合您的需求,则可以使用trigger(. ...

  4. WPF 触发器Triggers

    这一篇,总结Triggers. FrameworkElement.Style.ControlTemplate和DataTemplate都具有一个类型为TriggerCollection 的Trigge ...

  5. WPF之触发器Triggers

    Trigger触发器:表示一个触发器,它按单个条件应用属性值或执行操作. SourceName属性: 获取或设置与导致关联的 setter 要应用的属性对象的名称. Property属性: 设置需要判 ...

  6. WPF系列教程(二十九):触发器Triggers、MultiTrggers、EventTrigger——属性触发器、多触发器、事件触发器

    使用触发器可以自动完成简单的样式改变. 项目源码 触发器 在Style定义时使用Style.Triggers属性来实现: <!--设置触发器--> <Style.Triggers&g ...

  7. 老猿学5G:融合计费基于流计费的触发器Triggers

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 每个触发条件都是一个可计费事件.SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器 ...

  8. oracle apex触发器,triggers - 插入之前/更新Apex触发器之前,测试覆盖率失败 - 堆栈内存溢出...

    在机会上插入/更新触发器之前,我有一个非常简单的方法,它可以根据包含销售处(州)位置信息的下拉值自动选择价目表. 这是我的触发器 : trigger SelectPriceBook on Opport ...

  9. zabbix探究告警触发器Triggers

    Triggers函数的分类 功能 函数 值的比较与查找 abschange.delta.diff.band.change.nodata.last.prev 值的计算 max.min.avg.sum.c ...

最新文章

  1. hdfs/hbase报错:Incomplete HDFS URI, no host
  2. 安装后添加没有class library_Catalina的L/E Kext驱动安装方式
  3. OpenCASCADE:Modeling Algorithms模块几何工具之Intersections交叉
  4. sap.ui.viewModifications view extension
  5. git 配置origin_GitHub/Git配置与简单的使用
  6. c#补充print(多态性问题)【C#】
  7. ibm量子计算机应用,科学网—IBM量子计算机获重大突破 可进行百万项计算
  8. es的聚合数据的准确性
  9. [Guitar self-practising] 【吉他练习王-节奏练习】曲目1 基本扫弦节奏练习
  10. HDU2095find your present (2)【hash】
  11. Java通过代理服务器访问外部网络
  12. myecplise 完全开发
  13. 给最后一个li增加样式
  14. ABAP设置默认打印机
  15. CrossOver运行exe文件教程!!
  16. Win10问题篇:解决鼠标玩游戏单击(左击/右击)失灵问题。
  17. Jenkins卸载方法
  18. php__file__用法,PHP 的常量__FILE__的用法图解
  19. 跟风用Matlab画一棵圣诞树
  20. 如何正确在轧钢厂中运用无线测温产品

热门文章

  1. 数字图像处理|Matlab-图像分割与边缘检测实验-Hough线检测
  2. 基于决策树的分类预测
  3. matlab仿真分形树,使用MATLAB实现随机分形树模拟
  4. 为什么说DOM操作是昂贵的
  5. C语言编写冰雹猜想(角谷猜想)
  6. 腾讯云8核16G服务器18M带宽CPU性能可支撑多少人同时在线?
  7. 【NLP-新闻文本分类】1 数据分析和探索
  8. 随手写个node爬虫
  9. 技能在赛题解析:交换机防环路设置
  10. web_制作一个用户名 密码 性别 兴趣爱好 注册的界面