第二节:支配器,触发器与作业
第二节:调度器,触发器与作业调度器:Quartz.Net中核心的地方就调度器,调度器负责管理Quartz.NET应用运行时
第二节:调度器,触发器与作业
调度器: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 plaincopy
- public?class?MyJob?:?IJob??
- ??
- {??
- ??
- ???????publicvoid?Execute(IJobExecutionContextcontext)??
- ??
- ???????{??
- ??
- ???????????Console.WriteLine("我执行了,时间:{0}",?DateTime.Now);??
- ??
- ???????}??
- ??
- ?}???
?
2.雷同上一节的main函数:
?
[csharp]?view plaincopy
- static?void?Main(string[]?args)??
- ??
- {??
- ??
- ????????????//调度器??
- ??
- ????????????ISchedulerFactorysf?=?new?StdSchedulerFactory();??
- ??
- ????????????ISchedulersched?=?sf.GetScheduler();??
- ??
- ???
- ??
- ????????????//job详情,注意MyJob??
- ??
- ????????????IJobDetailmyJob?=?JobBuilder.Create<MyJob>()??
- ??
- ???????????????.WithIdentity("job1",?"group1")??
- ??
- ???????????????.Build();??
- ??
- ???
- ??
- ????????????//触发器??
- ??
- ????????????ITriggertrigger?=?TriggerBuilder.Create()??
- ??
- ????????????????.WithIdentity("trigger1",?"group1")??
- ??
- ????????????????.WithCronSchedule("0/5?*?18?*?*???")//这里用的复杂排程调度器??
- ??
- ????????????????.Build();??
- ??
- ???
- ??
- ????????????//关联job和触发器??
- ??
- ????????????sched.ScheduleJob(myJob,?trigger);??
- ??
- ???
- ??
- ????????????//执行??
- ??
- ????????????sched.Start();??
- ??
- ???
- ??
- ????????????Console.Read();??
- ??
- ???
- ??
- ????????????//关掉??
- ??
- ????????????sched.Shutdown(true);??
- ??
- ?}??
?
?
3.不一样上一节的运行结果:
??????????????????????????????
?
结语:下载下来Quartz.Net的例子,发现Quartz实在是太实用了,有简单的任务,有状态job,可以执行远程的job,而且配置也很强大,忍不住想往下学……
?
代码:
[csharp]?view plaincopy
- using?System;??
- using?System.Collections.Generic;??
- using?System.Linq;??
- using?Quartz.Impl;??
- ??
- namespace?Quartz.Demo??
- {??
- ????class?MyClass??
- ????{??
- ????????static?void?Main(string[]?args)??
- ????????{??
- ????????????//调度器??
- ????????????ISchedulerFactory?sf?=?new?StdSchedulerFactory();??
- ????????????IScheduler?sched?=?sf.GetScheduler();??
- ??
- ????????????//job详情,注意MyJob??
- ????????????IJobDetail?myJob?=?JobBuilder.Create<MyJob>()??
- ???????????????.WithIdentity("job1",?"group1")??
- ???????????????.Build();??
- ??
- ????????????//触发器??
- ????????????ITrigger?trigger?=?TriggerBuilder.Create()??
- ????????????????.WithIdentity("trigger1",?"group1")??
- ????????????????.WithCronSchedule("0/5?*?18?*?*???")??
- ????????????????.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);??
- ????????????}??
- ????????}??
- ????}??
- }??