上节中学到了quartz 如何解析corn-like 表达式,其实触发器中最核心的地方就是处理时间,
这一节让我们来了解下quartz中的触发器有哪些吧:
我想大家一定首先想到的就是处理corn-like的触发器吧,它就是CronTriggerImpl触发器,还是看一下类图,看看有多少触发器,和它们之间的关系吧
如上图,所有的触发器继承了ITrigger接口和AbstractTrigger这个抽象类,类图稍微有点乱,但大概也能看清它们的关系。
正如我们看到的,我们罗列一下上图的触发器吧:
CronTriggerImpl 使用corn-like表达式的一个触发器,触发时机比较容易定制
CalendarIntervalTriggerImpl 根据日历的时间间隔重复执行的一个触发器
DailyTimeIntervalTriggerImpl 根据每天重复的时间间隔
SimpleTriggerImpl 简单的触发器,比如只执行一次这样的
我们稍微看一下ITrigger这个接口,就会发现TriggerKey相当于触发器的一个主键,唯一标识一个触发器,并且一个触发器关联一个JobKey(相当于作业主键),比如还有GetNextFireTimeUtc()这样类似的接口方法,这个方法应该是得到下一次执行作业的时间。也就是一个触发器对应一个作业。
我们在用quartz的时候,对实例化上面哪些触发器是不可见的,是由TriggerBuilder这个类完成的。
可以看一下这些Builder类的结构是怎么的,如下图:
很明显一个触发器对应一个builder了。
下面我们就简单的SimpleScheduleBuilder来完成一个例子吧:
1:job代码:很简单输出当前时间
- public class MyJob : IJob
- {
- public void Execute(IJobExecutionContext context)
- {
- Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
- }
- }
2:调度代码:
- static void Main(string[] args)
- {
- //调度器
- ISchedulerFactory sf = new StdSchedulerFactory();
- IScheduler sched = sf.GetScheduler();
- //job详情,注意MyJob
- IJobDetail myJob = JobBuilder.Create<MyJob>()
- .WithIdentity("job1", "group1")
- .Build();
- //触发器,用的简单触发器,每隔5秒执行一次
- ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(t => t.RepeatForever().WithIntervalInSeconds(5))
- .WithIdentity("t1")
- .Build();
- //关联job和触发器
- sched.ScheduleJob(myJob, trigger);
- //执行
- sched.Start();
- Console.Read();
- //关掉
- sched.Shutdown(true);
- }
3:执行结果 间隔5s执行:
总结:认识了quartz中的触发器
全部代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Quartz.Impl;
- namespace Quartz.Demo
- {
- class Class5
- {
- static void Main(string[] args)
- {
- //调度器
- ISchedulerFactory sf = new StdSchedulerFactory();
- IScheduler sched = sf.GetScheduler();
- //job详情,注意MyJob
- IJobDetail myJob = JobBuilder.Create<MyJob>()
- .WithIdentity("job1", "group1")
- .Build();
- //触发器,用的简单触发器,每隔5秒执行一次
- ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(t => t.RepeatForever().WithIntervalInSeconds(5))
- .WithIdentity("t1")
- .Build();
- //关联job和触发器
- sched.ScheduleJob(myJob, trigger);
- //执行
- sched.Start();
- Console.Read();
- //关掉
- sched.Shutdown(true);
- }
- }
- public class MyJob : IJob
- {
- public void Execute(IJobExecutionContext context)
- {
- Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
- }
- }