Quartz.NET管理类

最近做项目设计到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             try

115             {

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         #endregion

128 

129     }

 

调用方法也很简单

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

2 

3 QuartzManager<MyJob>.startJobs();

 

你可能感兴趣的:(quartz)