第二节:调度器,触发器与作业

调度器

Quartz.Net中核心的地方就调度器,调度器负责管理Quartz.NET应用运行时环境。

上一节中代码中IScheduler sched = sf.GetScheduler(); 这一句代码看起来简单,其实背后做了好多事情,比如:初始化配置,是使用数据库还是内存,初始化线程池,是否是远程执行job等等,总之挺复杂的。

作业:

目前我的理解就是job,类似于上一节中自定义的MyJob

触发器:

用来告诉调度器作业什么时候触发.

解发器分为:SimpleTriggerImpl,CronTriggerImpl,DailyTimeIntervalTriggerImpl

具体的代码表现就是继承ITrigger这个接口。

如果只是简单的调度作业,比如每隔一小时执行一次哪么简单调度器(SimpleTriggerImpl)完全适合你,

如果您想指定工作日的每天的早上9点执行一个任务,复杂排程调度器(CronTriggerImpl)更为合适大家

复杂排程调度器采用Calendar-like表达式,

具体见:点我打表达式

 

例子

比如用复杂排程调度器写一个每天每天下午的 6点到6点59分每隔5s就触发一次的例子

1.雷同上一节的job:

[csharp]  view plain copy
  1. public class MyJob : IJob  
  2.   
  3. {  
  4.   
  5.        publicvoid Execute(IJobExecutionContextcontext)  
  6.   
  7.        {  
  8.   
  9.            Console.WriteLine("我执行了,时间:{0}", DateTime.Now);  
  10.   
  11.        }  
  12.   
  13.  }   


 

2.雷同上一节的main函数:

 

[csharp]  view plain copy
  1. static void Main(string[] args)  
  2.   
  3. {  
  4.   
  5.             //调度器  
  6.   
  7.             ISchedulerFactorysf = new StdSchedulerFactory();  
  8.   
  9.             ISchedulersched = sf.GetScheduler();  
  10.   
  11.    
  12.   
  13.             //job详情,注意MyJob  
  14.   
  15.             IJobDetailmyJob = JobBuilder.Create<MyJob>()  
  16.   
  17.                .WithIdentity("job1""group1")  
  18.   
  19.                .Build();  
  20.   
  21.    
  22.   
  23.             //触发器  
  24.   
  25.             ITriggertrigger = TriggerBuilder.Create()  
  26.   
  27.                 .WithIdentity("trigger1""group1")  
  28.   
  29.                 .WithCronSchedule("0/5 * 18 * * ? ")//这里用的复杂排程调度器  
  30.   
  31.                 .Build();  
  32.   
  33.    
  34.   
  35.             //关联job和触发器  
  36.   
  37.             sched.ScheduleJob(myJob, trigger);  
  38.   
  39.    
  40.   
  41.             //执行  
  42.   
  43.             sched.Start();  
  44.   
  45.    
  46.   
  47.             Console.Read();  
  48.   
  49.    
  50.   
  51.             //关掉  
  52.   
  53.             sched.Shutdown(true);  
  54.   
  55.  }  

 

 

3.不一样上一节的运行结果:

                              

 

结语:下载下来Quartz.Net的例子,发现Quartz实在是太实用了,有简单的任务,有状态job,可以执行远程的job,而且配置也很强大,忍不住想往下学……

 

代码:

[csharp]  view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using Quartz.Impl;  
  5.   
  6. namespace Quartz.Demo  
  7. {  
  8.     class MyClass  
  9.     {  
  10.         static void Main(string[] args)  
  11.         {  
  12.             //调度器  
  13.             ISchedulerFactory sf = new StdSchedulerFactory();  
  14.             IScheduler sched = sf.GetScheduler();  
  15.   
  16.             //job详情,注意MyJob  
  17.             IJobDetail myJob = JobBuilder.Create<MyJob>()  
  18.                .WithIdentity("job1""group1")  
  19.                .Build();  
  20.   
  21.             //触发器  
  22.             ITrigger trigger = TriggerBuilder.Create()  
  23.                 .WithIdentity("trigger1""group1")  
  24.                 .WithCronSchedule("0/5 * 18 * * ? ")  
  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.         public class MyJob : IJob  
  40.         {  
  41.             public void Execute(IJobExecutionContext context)  
  42.             {  
  43.                 Console.WriteLine("我执行了,时间:{0}", DateTime.Now);  
  44.             }  
  45.         }  
  46.     }  
  47. }  

猜你喜欢

转载自zxb1985.iteye.com/blog/1841377