第八节:触发器

上节中学到了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代码:很简单输出当前时间

 

[csharp]  view plain copy
  1. public class MyJob : IJob  
  2.    {  
  3.        public void Execute(IJobExecutionContext context)  
  4.        {  
  5.            Console.WriteLine("我执行了,时间:{0}", DateTime.Now);  
  6.        }  
  7.    }  

 

2:调度代码:

 

[csharp]  view plain copy
  1. static void Main(string[] args)  
  2.         {  
  3.             //调度器  
  4.             ISchedulerFactory sf = new StdSchedulerFactory();  
  5.             IScheduler sched = sf.GetScheduler();  
  6.   
  7.             //job详情,注意MyJob  
  8.             IJobDetail myJob = JobBuilder.Create<MyJob>()  
  9.                .WithIdentity("job1""group1")  
  10.                .Build();  
  11.   
  12.             //触发器,用的简单触发器,每隔5秒执行一次  
  13.             ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(t => t.RepeatForever().WithIntervalInSeconds(5))  
  14.                 .WithIdentity("t1")  
  15.                 .Build();  
  16.   
  17.             //关联job和触发器  
  18.             sched.ScheduleJob(myJob, trigger);  
  19.   
  20.             //执行  
  21.             sched.Start();  
  22.   
  23.             Console.Read();  
  24.   
  25.             //关掉  
  26.             sched.Shutdown(true);  
  27.         }  

 

3:执行结果 间隔5s执行:

 

 

 

总结:认识了quartz中的触发器

 

 

 

全部代码:

[csharp]  view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Quartz.Impl;  
  6.   
  7. namespace Quartz.Demo  
  8. {  
  9.     class Class5  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             //调度器  
  14.             ISchedulerFactory sf = new StdSchedulerFactory();  
  15.             IScheduler sched = sf.GetScheduler();  
  16.   
  17.             //job详情,注意MyJob  
  18.             IJobDetail myJob = JobBuilder.Create<MyJob>()  
  19.                .WithIdentity("job1""group1")  
  20.                .Build();  
  21.   
  22.             //触发器,用的简单触发器,每隔5秒执行一次  
  23.             ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(t => t.RepeatForever().WithIntervalInSeconds(5))  
  24.                 .WithIdentity("t1")  
  25.                 .Build();  
  26.   
  27.             //关联job和触发器  
  28.             sched.ScheduleJob(myJob, trigger);  
  29.   
  30.             //执行  
  31.             sched.Start();  
  32.   
  33.             Console.Read();  
  34.   
  35.             //关掉  
  36.             sched.Shutdown(true);  
  37.         }  
  38.     }  
  39.   
  40.   
  41.     public class MyJob : IJob  
  42.     {  
  43.         public void Execute(IJobExecutionContext context)  
  44.         {  
  45.             Console.WriteLine("我执行了,时间:{0}", DateTime.Now);  
  46.         }  
  47.     }  

猜你喜欢

转载自zxb1985.iteye.com/blog/1841384
今日推荐