Quartz API 简介

Quartz API 的关键接口和类包括:

类型 描述
IScheduler 与调度器交互的主要 API
IJob 由希望由调度器执行的组件实现的接口
IJobDetail 用于定义作业实例
ITrigger 定义给定作业执行计划的组件,一个作业可以关联多个触发器
JobBuilder 用于定义/构建 JobDetail 实例的工具,JobDetail 实例进一步定义作业实例
TriggerBuilder 用于定义/构建触发器实例的工具
SchedulerBuilder 用于定义/构建调度器实例的工具,要求 Quartz 3.1 或更高版本

为了提高可读性,在本教程中以下术语可互换使用:ISchedulerSchedulerIJobJobIJobDetailJobDetailITriggerTrigger

Scheduler 的生命周期始于通过 SchedulerFactory 创建,终于调用其 Shutdown() 方法。创建后,可以使用 IScheduler 接口添加、移除、列出作业和触发器,以及执行其他与调度相关的操作(如暂停触发器)。但是,直到使用 Start() 方法启动调度器后,调度器才会根据触发器实际执行作业,正如 第 1 课所示。

Quartz 提供了 “构建器” 类,它们定义了一种领域特定语言(DSL,有时也称为 “流畅接口”)。在前一课中,你已经看到了它的示例,这里我们再次展示其中的一部分。

// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
    .WithIdentity(name: "myJob", group: "group1")
    .Build();

// Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity(name: "myTrigger", group: "group1")
    .StartNow()
    .WithSimpleSchedule(x => x
        .WithIntervalInSeconds(40)
        .RepeatForever())
    .Build();

var sched = scheduleFactory.GetScheduler();

// Tell Quartz to schedule the job using our trigger
await sched.ScheduleJob(job, trigger);

构建作业定义的代码块采用了 JobBuilder 来创建 IJobDetail。类似地,构建触发器的代码块利用了 TriggerBuilder 的流畅接口来构造触发器。

可能的调度扩展方法包括:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

DateBuilder 类型包含了多种方法,便于根据特定时间点轻松构建 DateTimeOffset 实例(例如,表示下一个整点时间的日期——如果当前时间为 9:43:27,则为 10:00:00)。

在本文档中