在本教程中,为了便于阅读,以下术语可以互换使用:IScheduler和Scheduler,IJob和Job,IJobDetail和JobDetail,ITrigger和Trigger。
一个 Scheduler的生命周期是在Scheduler的创建开始的, 在Shutdown()方法结束。 一旦创建了IScheduler接口,就可以使用它添加,删除和列出作业和触发器,并执行其他与调度相关的操作(例如暂停触发器)。
Quartz 提供“builder”领域特定语言类(or DSL, 有时我们也称为流接口). 入门课程中我们已经看过了,在这里我们再单独看下这部分:
// define the job and tie it to our HelloJob class //定义这个工作并将其与我们的HelloJob类联系起来 IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("job1", "group1") .Build(); // Trigger the job to run now, and then repeat every 10 seconds //触发作业立即运行,然后每10秒重复一次 RepeatForever:永远重复RepeatForever()表示一直执行,另一个方法->WithRepeatCount(10),表示执行10次 .StartAt(DateBuilder.DateOf(23, 30, 0)):开始时间 // ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10)//WithIntervalInSeconds间隔多少秒,也有间隔分钟和秒的方法 .RepeatForever()) .Build(); // Tell quartz to schedule the job using our trigger //告诉quartz的调度schedule 哪个工作用了我们哪个触发器 await scheduler.ScheduleJob(job, trigger);
以上代码块使用JobBuilder,通过流接口创建了一个IJobDetail类型job(product);同样的方法创建了trigger和特定于给定触发器类型的扩展方法。其他扩展方法有:
如果间隔N天或者某一段时间,建议使用WithCalendarIntervalSchedule
需要排除节假日的用WithCalendarIntervalSchedule
WithCalendarIntervalSchedule
WithCronSchedule
WithDailyTimeIntervalSchedule
WithSimpleSchedule:如果你只需要你的 job 在某个特定的时刻执行一次, 或者在某一个时刻重复执行几遍, 使用WithSimpleSchedule
DateBuilder类包含各种方法,用于为特定的时间点(如表示下一个偶数小时的日期 - 也就是说10:00:00,如果它当前为9:43:27)轻松构建DateTimeOffset实例。
如果您需要“一次性”执行(在某个特定时间只执行一项作业),或者如果您需要在给定时间启动作业,并重复执行N次,SimpleTrigger会很方便的T之间执行。如果您希望根据类似日历的时间表进行触发,例如“每个星期五,中午”或“每个月的第10天的10:15”,则CronTrigger非常有用。
共有条评论 网友评论