Quartz API 简介
Quartz API 的关键接口和类包括:
类型 | 描述 |
---|---|
IScheduler | 与调度器交互的主要 API |
IJob | 由希望由调度器执行的组件实现的接口 |
IJobDetail | 用于定义作业实例 |
ITrigger | 定义给定作业执行计划的组件,一个作业可以关联多个触发器 |
JobBuilder | 用于定义/构建 JobDetail 实例的工具,JobDetail 实例进一步定义作业实例 |
TriggerBuilder | 用于定义/构建触发器实例的工具 |
SchedulerBuilder | 用于定义/构建调度器实例的工具,要求 Quartz 3.1 或更高版本 |
为了提高可读性,在本教程中以下术语可互换使用:IScheduler
和 Scheduler
,IJob
和 Job
,IJobDetail
和 JobDetail
,ITrigger
和 Trigger
。
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)。