最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下。

  1. public class QuartzManager<T> where T : class,IJob
  2. {
  3. #region 变量
  4. private static ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); //scheduler工厂
  5. private static String JOB_GROUP_NAME = "JOBGROUP_NAME"; //Job群组名
  6. private static String TRIGGER_GROUP_NAME = "TRIGGERGROUP_NAME"; //触发器群组名
  7. #endregion
  8.  
  9. #region 添加,删除,修改Job方法
  10. /// <summary>
  11. /// 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
  12. /// </summary>
  13. /// <param name="pStrJobName">任务名</param>
  14. /// <param name="pStrCronExpress">触发器表达式</param>
  15. public static void addJob(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary)
  16. {
  17. try
  18. {
  19. IScheduler sched = schedulerFactory.GetScheduler();
  20. // 创建任务
  21. IJobDetail job = JobBuilder.Create<T>()
  22. .WithIdentity(pStrJobName, JOB_GROUP_NAME)
  23. .Build();
  24.  
  25. // 创建触发器
  26. ITrigger trigger = TriggerBuilder.Create()
  27. .WithIdentity(pStrJobName, TRIGGER_GROUP_NAME)
  28. .WithCronSchedule(pStrCronExpress)
  29. .Build();
  30.  
  31. //给任务传参数
  32. foreach (KeyValuePair<string, object> kvp in pDictionary)
  33. {
  34. job.JobDataMap.Put(kvp.Key, kvp.Value);
  35. }
  36. sched.ScheduleJob(job, trigger);
  37. }
  38. catch (Exception e)
  39. {
  40. throw new Exception(e.Message);
  41. }
  42. }
  43.  
  44. /// <summary>
  45. /// 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
  46. /// </summary>
  47. /// <param name="pStrJobName">任务名称</param>
  48. public static void RemoveJob(string pStrJobName)
  49. {
  50. try
  51. {
  52. IScheduler sched = schedulerFactory.GetScheduler();
  53. JobKey jobKey = new JobKey(pStrJobName);
  54. TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME);
  55. sched.PauseTrigger(triggerKey);// 停止触发器
  56. sched.UnscheduleJob(triggerKey);// 移除触发器
  57. sched.DeleteJob(jobKey);// 删除任务
  58. }
  59. catch (Exception e)
  60. {
  61. throw new Exception(e.Message);
  62. }
  63. }
  64.  
  65. /// <summary>
  66. /// 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
  67. /// </summary>
  68. /// <param name="pStrJobName">任务名</param>
  69. /// <param name="pStrCronExpress">触发器表达式</param>
  70. public static void ModifyJobTime(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary)
  71. {
  72. try
  73. {
  74. IScheduler sched = schedulerFactory.GetScheduler();
  75. TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME);
  76. ICronTrigger trigger = (ICronTrigger)sched.GetTrigger(triggerKey);
  77. if (trigger == null)
  78. {
  79. return;
  80. }
  81. RemoveJob(pStrJobName);
  82. addJob(pStrJobName, pStrCronExpress,pDictionary);
  83. }
  84. catch (Exception e)
  85. {
  86. throw new Exception(e.Message);
  87. }
  88. }
  89. #endregion
  90.  
  91. #region 启动,关闭Job
  92. /// <summary>
  93. /// 启动所有定时任务
  94. /// </summary>
  95. public static void startJobs()
  96. {
  97. try
  98. {
  99. IScheduler sched = schedulerFactory.GetScheduler();
  100. sched.Start();
  101. }
  102. catch (Exception e)
  103. {
  104. throw new Exception(e.Message);
  105. }
  106. }
  107.  
  108. /// <summary>
  109. /// 关闭所有定时任务
  110. /// </summary>
  111. public static void ShutdownJobs()
  112. {
  113. try
  114. {
  115. IScheduler sched = schedulerFactory.GetScheduler();
  116. if (!sched.IsShutdown)
  117. {
  118. sched.Shutdown();
  119. }
  120. }
  121. catch (Exception e)
  122. {
  123. throw new Exception(e.Message);
  124. }
  125. }
  126. #endregion
  127.  
  128. }

调用方法也很简单

  1. 1 QuartzManager<MyJob>.addJob(jobnName, cronExpress, dictionary);
  2. 2
  3. 3 QuartzManager<MyJob>.startJobs();

(转)Quartz.NET管理类的更多相关文章

  1. Quartz.NET管理类

    最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...

  2. Quartz管理类

    package com.sihuatech.project.task.manager; import java.text.ParseException; import org.quartz.CronT ...

  3. 【Unity3D游戏开发】之全局管理类的几种方式 (十六)

    如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...

  4. Unity协程(Coroutine)管理类——TaskManager工具分享

    博客分类: Unity3D插件学习,工具分享 源码分析   Unity协程(Coroutine)管理类——TaskManager工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处 ...

  5. [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】

    本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...

  6. FreeOnTerminate 的线程在线程管理类的Destroy释放时手工释放的问题

    这个问题折腾了我整整一天. 有一个线程管理类,集中管理所有新建的线程, 线程统一在创建时标识 FreeOnTerminate 为 True. 因为有的线程是不限次循环的,所以在管理类最后 Destro ...

  7. C++智能指针管理类

    1.程序员明确的进行内存释放 对于c++程序员,最头脑的莫过于对动态分配的内存进行管理了.c++在堆上分配的内存,需要程序员负责对分配的内存进行释放.但有时内存的释放看起来并不件很轻松的事,如下程序 ...

  8. GS LiveMgr心跳管理类

    struct LiveMgr { private: int m_nCount; ///< 管理数量 std::vector<int> m_vecChannels; ///< 所 ...

  9. MoveManager管理类

    MoveManager:移动管理类 struct MoveOpt { int cur_seq; ObjecInfo* obj; }; std::map<ObjID, MoveOpt> m_ ...

随机推荐

  1. 【Away3D代码解读】(五):动画模块及骨骼动画

    动画模块核心存放在away3d.animators包里: Away3D支持下面几种动画格式: VertexAnimator:顶点动画 SkeletonAnimator:骨骼动画 UVAnimator: ...

  2. C++学习笔记(十三):类、包和接口

    看标题感觉这些术语和C++没有什么关系啊,包和接口是Java等语言加入的概念. 这篇文章是基于Java等语言的新概念(相对于C++来说的新概念)来看C++的设计思路. 类: C++中,一个文件可以包含 ...

  3. zabbix 3.0 安装

    zabbix3.0安装注意: 1.PHP要5.4版本以上 2.防火墙关闭 3.selinux关闭 注:本操作系统为centos 6.5 X86   操作步骤 一.安装PHP 添加 epel 源 # r ...

  4. git 几款好用的客户端工具

    虽然git命令非常好用,但客户端UI工具掌握起来.使用起来更加容易.如果你不想用git命令的话,那就用UI工具代替吧. 下面介绍下几款好用的git工具 1.tortoiseGit for Mac (这 ...

  5. iOS之FMDB 转载

      写的较好的博客:http://blog.csdn.net/xyz_lmn/article/details/9312837 http://www.cnblogs.com/wuhenke/archiv ...

  6. html5非常火,他究竟与html4有何差别?

    HTML5是HTML标准的下一个版本号.越来越多的程序猿開始HTML5来构建站点.假设你同一时候使用HTML4和HTML5的话 ,你会发现用HTML5从头构建.比从HTML4迁移到HTML5要方便非常 ...

  7. 并发与同步 (一) ThreadLocal与Synchronized 用哪一个好

    ThreadLocal是什么? 历史 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以 ...

  8. 给定表达式[x/2] + y + x * y, 其中x,y都是正整数。

    改进了一下,不过还是要十多秒吧. package com.boco.study; import java.math.BigDecimal; import java.util.Calendar; imp ...

  9. Android下实现GPS定位服务

    1.申请Google API Key,参考前面文章 2.实现GPS的功能需要使用模拟器进行经纬度的模拟设置,请参考前一篇文章进行设置 3.创建一个Build Target为Google APIs的项目 ...

  10. 飘逸的python - 使用dis模块进行代码层次的性能剖析

    http://blog.csdn.net/handsomekang/article/details/41479597?utm_source=tuicool&utm_medium=referra ...