首页 > 学院 > 开发设计 > 正文

Quartz.NET管理类

2019-11-17 02:46:51
字体:
来源:转载
供稿:网友

Quartz.NET管理类

2014-11-06 19:47 by 无眠, ... 阅读, ... 评论, 收藏, 编辑

最近做项目设计到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  37                 sched.ScheduleJob(job, trigger); 38             } 39             catch (Exception e) 40             { 41                 throw new Exception(e.Message); 42             } 43         } 44  45         /// <summary> 46         /// 移除一个任务(使用默认的任务组名,触发器名,触发器组名)  47         /// </summary> 48         /// <param name="pStrJobName">任务名称</param> 49         public static void RemoveJob(string pStrJobName) 50         { 51             try 52             { 53                 IScheduler sched = schedulerFactory.GetScheduler(); 54                 JobKey jobKey = new JobKey(pStrJobName); 55                 TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME); 56                 sched.PauseTrigger(triggerKey);// 停止触发器   57                 sched.UnscheduleJob(triggerKey);// 移除触发器   58                 sched.DeleteJob(jobKey);// 删除任务   59             } 60             catch (Exception e) 61             { 62                 throw new Exception(e.Message); 63             } 64         } 65  66         /// <summary> 67         /// 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)  68         /// </summary> 69         /// <param name="pStrJobName">任务名</param> 70         /// <param name="pStrCronExpress">触发器表达式</param> 71         public static void ModifyJobTime(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary) 72         { 73             try 74             { 75                 IScheduler sched = schedulerFactory.GetScheduler(); 76                 TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME); 77                 ICronTrigger trigger = (ICronTrigger)sched.GetTrigger(triggerKey); 78                 if (trigger == null) 79                 { 80                     return; 81                 } 82                 RemoveJob(pStrJobName); 83                 addJob(pStrJobName, pStrCronExpress,pDictionary); 84             } 85             catch (Exception e) 86             { 87                 throw new Exception(e.Message); 88             } 89         } 90         #endregion 91  92         #region 启动,关闭Job 93         /// <summary> 94         /// 启动所有定时任务  95         /// </summary> 96         public static void startJobs() 97         { 98             try 99             {100                 IScheduler sched = schedulerFactory.GetScheduler();101                 sched.Start();102             }103             catch (Exception e)104             {105                 throw new Exception(e.Message);106             }107         } 108 109         /// <summary>110         /// 关闭所有定时任务111         /// </summary>112         public static void ShutdownJobs()113         {114             try115             {116                 IScheduler sched = schedulerFactory.GetScheduler();117                 if (!sched.IsShutdown)118                 {119                     sched.Shutdown();120                 }121             }122             catch (Exception e)123             {124                 throw new Exception(e.Message);125             }126         }  127         #endregion128 129     }

调用方法也很简单

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表