首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

第二节:支配器,触发器与作业

2013-04-07 
第二节:调度器,触发器与作业调度器: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
  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 plaincopy
  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 plaincopy
  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. }??

热点排行