译者注:

目录在这 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. 《Linux shell 脚本攻略》第1章——读书笔记

    目录 文件描述符及重定向 函数和参数 迭代器 算术比较 文件系统相关测试 字符串进行比较 文件描述符及重定向 echo "This is a sample text 1" > ...

  2. 一、CAN协议基础知识

    一.CAN总线基础知识 注:参考江科大教程,瑞萨电子<CAN入门教程>. CAN (Controller Area Network),是ISO国际标准化的串行通信协议.CAN协议经过ISO ...

  3. WitAwards 2024荣耀登榜!AOne载誉而归!

    近日,FCIS 2024网络安全创新大会在上海举办.本次大会以"迈向安全服务化时代"为主题,邀请来自全球的网安精英.技术专家.CISO/CSO.白帽子.创业者等展开深度对话,分享与 ...

  4. HBase多租户分组

    一.分组简介 RegionServer Group 通过对 RegionServer 进行分组,不同的 RegionServer 分到不同的组.每个组可以按需挂载不同的表,并且当组内的表发生异常后,R ...

  5. 一个SQL就让内存耗光了

    一个SQL内存为什么就没了呢 最近遇到一个故障,研发新上线一个功能,成功把主机内存耗光,导致实例重启.复现一个SQL如何把数据库的内存耗光. 实验环境 Oracle Database 19c(故障发生 ...

  6. DeepSeek-R1满血版性能飙升四倍,成本大降,竟是因为……

    近日,天翼云DeepSeek模型推理技术迎来重大升级!该技术不仅支撑DeepSeek-R1满血版模型实现性能的四倍提升,更将大规模部署模型的成本降至原来的25%以下,为AI应用落地铺就更为宽广的道路. ...

  7. 发那科FANUC机器人M-710iC减速机维修看这几步

     发那科作为全球知名的工业机器人制造商,其M-710iC型号机器人在工业界享有盛誉.然而,即便是最顶尖的设备也难免会遇到维修问题,其中四轴传动齿轮箱的维修尤为关键.本文将深入探讨发那科FANUC机器人 ...

  8. ruoyi-vue 界面框架构造

    界面框架: 我采用了flex布局,先分左右,然后右侧再分上下. 步骤: 1. 首先实现简单的菜单 1.1 菜单是个菜单项数组 [] 1.2 菜单项结构 例子 { id:'001', name: '历史 ...

  9. Ruoyi-vue 左侧菜单栏默认保持收缩

    在项目的 src\store\modules\app.js 路径下 sidebar: { opened: Cookies.get('sidebarStatus') ? !!+Cookies.get(' ...

  10. DW001 - 数据仓库理论知识

    数据仓库概念 数据仓库基本架构 数据集市概念 数据湖概念 数据仓库概念 数据仓库(Data Warehouse,DW)是一个面向主题的.集成的.非易失的.反映历史变化的.用来支持企业管理决策的数据集合 ...