译者注:

目录在这 Quartz.NET 3.x 教程

原文在这 Lesson 2: Jobs And Triggers

Quartz API

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

  • IScheduler - 跟调度器交互的主要应用程序接口
  • IJob - 你希望调度器执行的作业组件需要实现这个接口
  • IJobDetail - 用来定义作业
  • ITrigger - 定义指定作业的调度计划的组件
  • JobBuilder - 用来定义/构建作业详情实例,并用来定义作业实例.
  • TriggerBuilder - 用来定义/构建触发器实例

为了便于阅读以下术语可在本教程中互换使用: ISchedulerScheduler, IJobJob, IJobDetailJobDetail, ITriggerTrigger.

一个 调度器 (Scheduler) 的生命周期受其创建的限制, 通过 SchedulerFactory 和对其 Shutdown() 方法的调用. 一旦创建了 IScheduler 接口后可以使用添加, 移除, 和列出 Jobs 和 Triggers, 以及执行其他调度相关的操作 (例如暂停一个触发器). 但是, 在使用 Start() 方法启动之前 Scheduler 不会对任何触发器 (执行作业) 有实际行动, 就如 [课程1:] 中所示.

Quartz 提供了一些领域特定语言 (Domain Specific Language) (简称 DSL, 有时也被叫做 "流式接口 (fluent interface)")的 "构建器 (builder)" 类. 在上一课中你看到过一个示例, 我们在这里再次介绍其中的一部分:

// 定义作业并绑定我们的 HelloJob 类
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob", "group1") // 作业名称 "myJob", 组名 "group1"
.Build(); // 触发作业并立刻执行, 之后每40秒执行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(40)
.RepeatForever())
.Build(); // 告诉 quartz 使用我们的触发器来调度作业
await sched.scheduleJob(job, trigger);

构建作业定义的代码块使用作业构建器 JobBuilder 的的流式接口创建了一个东东, IJobDetail. 同样的, 构建触发器的代码块使用触发器构建器 TriggerBuilder 的流式接口和一些特定类型触发器的扩展方法, 可能的调度扩展方法有:

  • WithCalendarIntervalSchedule()
  • WithCronSchedule()
  • WithDailyTimeIntervalSchedule()
  • WithSimpleSchedule()

日期构建器类 (DateBuilder) 包含各种方法以便构造特定时间点的 DateTimeOffset 实例 (例如表示下一个偶数小时的日期 - 或者说如果现在 9:43:27 那么下个偶数小时就是 10:00:00).

Jobs 和 Triggers

通常 Job 是一个实现了 IJob 接口的类, 她仅有一个简单方法:

IJob 接口

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

当作业的触发器被激活时 (稍后会更多), Execute(..) 方法会被调度器的某个工作线程调用. 传递给这个方法的参数 JobExecutionContext 对象向作业实例提供其 "运行时" 环境的相关信息 - 执行其的 Scheduler 的句柄, 触发其执行的触发器的句柄, 作业的 JobDetail 对象, 以及一些其他项.

JobDetail 对象由 Quartz.NET 客户端 (你的程序) 在将 Job 添加到调度器时创建. 她包含 Job 的各种属性设置, 以及 JobDataMap, 可用于给你的作业实例存储相关状态信息. 这本质上是作业实例的定义, 会在下一课中进一步详细讨论.

Trigger 对象被用来触发作业的执行 (或 "激发"). 当你希望调度一个作业时, 你需要实例化一个触发器并 '调优' 其属性来提供你想要的调度. Quartz 附带了几种不同的触发器类型, 但最常用的类型是 SimpleTrigger (接口是 ISimpleTrigger) 和 CronTrigger (接口是 ICronTrigger).

SimpleTrigger 适用于如果需要 '一次性' 的执行 (在给定的时间内只执行一次), 或者如果你需要在给定的时间触发一个作业, 并让其重复 N 次, 执行之间的延迟为 T. CronTrigger 更适用于如果你希望基于类似日历调度 - 例如 "每周五, 中午" 或 "每月10日 10:15".

为什么是 Jobs 和 Triggers? 许多其他调度器对作业和触发器没有单独的概念. 一些只是简单的把 'job' 定义为执行时间 (或调度) 以及一些小的作业标识符. 另一些更像是 Quartz 里的作业和触发器的混合体. 在开发 Quartz 的过程中, 我们决定制造概念来分离调度和该调度下执行的工作, 这样会有 (我们觉得) 很多好处.

例如, Jobs 可以独立于触发器在作业调度器中被创建和被存储, 并且多个触发器可以关联同一个作业. 这种松耦合的另一个好处是能够在相关联的触发器过期后依旧保留在调度器中配置的作业, 以便以后可以重新调度这些作业, 而不需要重新定义她们. 她还允许你修改和替换触发器而不必重新定义相关联的作业.

Identities

JobsTriggers 注册到 Quartz 调度器时会被赋予标识键, 通过JobsTriggers 的标识键 (也就是JobKeyTriggerKey) 可以将她们放置到不同的 '分组'中这对于将你的作业和触发器组织为形如 "reporting jobs" 和 "maintenance jobs" 等类别分组很有帮助. 在同一个分组内作业和触发器的标识键名称必须是唯一的

  • 或者换句话说, 作业或触发器的完整键 (或者叫标识符) 是名称和组的组合.

现在你大致了解了什么是 JobsTriggers, 你可以在 教程 3:教程 4: 中更多的了解她们.

Quartz.NET - 教程 2: 作业和触发器的更多相关文章

  1. Quartz.NET - 教程 4: 更多关于触发器

    译者注: 目录在这 [译]Quartz.NET 3.x 教程 译者注: 原文在这 Lesson 4: More About Triggers 跟作业一样, 触发器也相当容易使用, 但确实包含各种可定制 ...

  2. Quartz.Net进阶之一:初识Job作业和触发器

        前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...

  3. Quartz.NET - 教程 5: 简单触发器

    译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 5: SimpleTrigger 如果你需要在特定的时间点执行一次作业, 或者在特定的时间点执行一次作业, 然后在特定的 ...

  4. (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例

    http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...

  5. Quartz入门教程

    public class App { public static void main(String[] args) throws MessagingException, IOException { / ...

  6. [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介

    第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...

  7. Quartz 框架 教程(中文版)2.2.x

    Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架 Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介 Quar ...

  8. Quartz 使用教程

    首先说说,为什么要写这篇文章: Quartz 的 v2.3.2 版本改动比较大,目前网上的资料都是旧版本,很缺乏相关资料 很多资料讲解非常不全面,例如 Quartz Listener 的介绍和使用基本 ...

  9. Quartz定时任务学习(五)触发器

    顾名思义,Trigger(触发器)的责任就是触发一个 Job 去执行.当用 Scheduler 注册一个 Job 的时候要创建一个 Trigger 与这个 Job 相关联.Quartz 提供了四种类型 ...

  10. Quartz.NET教程:(01) 使用Quartz

    使用调度器 (scheduler) 之前要先用 ISchedulerFactory 的一个实现来实例化调度器(scheduler).一旦调度器实例化完成,则它可以被启动.置于备用模式或者关闭.需要注意 ...

随机推荐

  1. Solution -「AGC 020F」Arcs on a Circle

    \(\mathscr{Description}\)   Link.   在一个周长为 \(c\) 的圆周上放置长度分别为 \(l_1,l_2,\cdots,l_n\) 的弧,每条弧的位置独立均匀随机. ...

  2. 第八章 (Nginx+Lua)流量复制/AB测试/协程

    流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进 ...

  3. Kotlin:【数字类型】安全转换函数

  4. 0101-JDK和tomcat的安装配置

    一.JDK8安装与配置 分别配置如下三个系统变量 JAVA_HOME设置变量值为java JDK的安装目录例如: C:\Program Files\Java\jdk1.8.0 PATH添加变量值 %J ...

  5. 并发编程 - 线程同步(三)之原子操作Interlocked简介

    上一章我们了解了3种处理多线程中共享资源安全的方法,今天我们将更近一步,学习一种针对简单线程同步场景的解决方案--Interlocked. 在此之前我们先学习一个概念--原子操作. 01.原子操作 原 ...

  6. ELB UDP健康检查常见故障分析

    本文分享自天翼云开发者社区<ELB UDP健康检查常见故障分析>,作者:王****宁 什么是UDP健康检查 UDP是面向非连接的一种协议,在发送数据前不会通过进行三次握手建立连接,UDP健 ...

  7. 文本处理命令head tail more less tr cut paste wc

    文本处理命令 命令**head tail more less tr cut paste wc** 磁盘分区利用率 df|tr -s ' ' :|cut -d : -f5 df|tr -s ' ' :| ...

  8. macos修改hosts后清理dns缓存

    sudo killall -HUP mDNSResponder sudo killall mDNSResponderHelper sudo dscacheutil -flushcache

  9. Atcoder ABC388F Dangerous Sugoroku 题解 [ 蓝 ] [ 矩阵加速 ] [ 状压矩乘 ] [ 模拟 ]

    Dangerous Sugoroku:赛时写了矩乘 T 飞了,受到 sunkuangzheng 大佬的启发才知道要状压矩乘. 暴力矩乘思路 直接像过河那样写模拟细节非常多,于是考虑像美食家一样的思路, ...

  10. FreeSql学习笔记——10.贪婪加载

    前言   FreeSql贪婪加载主要对应导航属性,将需要的数据一次加载出来,包括查询表的子表或者关联表的关联数据,用于一对一.一对多.多对一.多对多的关系数据查询,查询的时候一对一.多对一关系查询是可 ...