译者注:

目录在这 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. MAC安装redis的简单方法

    part 1:安装redis1.官网下载压缩包https://redis.io/download or brew install redis(太慢了-)我此处选的法一,先去官网上下载包,在解压使用. ...

  2. ClickHouse介绍-示例

    示例 GitHub 事件数据集 数据集包含了GitHub上从2011年到2020年12月6日的所有事件,大小为31亿条记录.下载大小为75 GB,如果存储在使用lz4压缩的表中,则需要多达200 GB ...

  3. 学Shiro完结版-4

    第十四章 SSL--<跟我学Shiro> 对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\lo ...

  4. w3cschool-Groovy 教程

    Groovy的特点 Groovy中有以下特点: 同时支持静态和动态类型. 支持运算符重载. 本地语法列表和关联数组. 对正则表达式的本地支持. 各种标记语言,如XML和HTML原生支持. Groovy ...

  5. Nukem pg walkthrough Intermediate

    nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.105 Starting Nmap 7.94SVN ( https://nmap.org ...

  6. Fluttter基础组件Image的使用

    1.图片 Image 图片组件( Image)是显示图像的组件, Image 组件有多种构造函数 : new Image:从 ImageProvider 获取图像 . new Image.asset: ...

  7. MacOS修改应用快捷键的一般思路

    具体步骤为: 使用CheatSheet软件查看菜单项名称 在系统设置中修改菜单项的快捷键 举个例子:修改Chrome中左右切换tab的快捷键(系统语言为英文,中文同理) 默认采用Ccontrol Ta ...

  8. 并发编程 - 线程同步(七)之互斥锁Monitor

    通过前面对锁lock的基本使用以及注意事项的学习,相信大家对锁的同步机制有了大致了解,今天我们将继续学习--互斥锁Monitor. lock是C#语言中的关键字,是语法糖,lock语句最终会由C#编译 ...

  9. 如何在Spring Boot项目中添加国密SM4加密支持?——基于过滤器的实现

    如何在Spring Boot项目中添加国密SM4加密支持呢?--基于过滤器的实现 引言 ​ 在数字化时代,数据安全至关重要,尤其是在API交互过程中,确保传输数据的安全性是保护隐私和机密信息的关键.中 ...

  10. 普通人如何靠 AI 副业,1 个月实现月薪 3 万 +

    在物价飞涨.经济低迷的今天,仅靠死工资,却有着不固定的开销?房贷.车贷.孩子的教育费用-- 望着日益增长的开销,你是否也在夜深人静时,为钱包的羞涩而发愁?无数次幻想过拥有一份高收入的副业,却始终在迷茫 ...