最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下。
public class QuartzManager<T> where T : class,IJob
{
#region 变量
private static ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); //scheduler工厂
private static String JOB_GROUP_NAME = "JOBGROUP_NAME"; //Job群组名
private static String TRIGGER_GROUP_NAME = "TRIGGERGROUP_NAME"; //触发器群组名
#endregion #region 添加,删除,修改Job方法
/// <summary>
/// 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
/// </summary>
/// <param name="pStrJobName">任务名</param>
/// <param name="pStrCronExpress">触发器表达式</param>
public static void addJob(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary)
{
try
{
IScheduler sched = schedulerFactory.GetScheduler();
// 创建任务
IJobDetail job = JobBuilder.Create<T>()
.WithIdentity(pStrJobName, JOB_GROUP_NAME)
.Build(); // 创建触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(pStrJobName, TRIGGER_GROUP_NAME)
.WithCronSchedule(pStrCronExpress)
.Build(); //给任务传参数
foreach (KeyValuePair<string, object> kvp in pDictionary)
{
job.JobDataMap.Put(kvp.Key, kvp.Value);
}
sched.ScheduleJob(job, trigger);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
} /// <summary>
/// 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
/// </summary>
/// <param name="pStrJobName">任务名称</param>
public static void RemoveJob(string pStrJobName)
{
try
{
IScheduler sched = schedulerFactory.GetScheduler();
JobKey jobKey = new JobKey(pStrJobName);
TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME);
sched.PauseTrigger(triggerKey);// 停止触发器
sched.UnscheduleJob(triggerKey);// 移除触发器
sched.DeleteJob(jobKey);// 删除任务
}
catch (Exception e)
{
throw new Exception(e.Message);
}
} /// <summary>
/// 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
/// </summary>
/// <param name="pStrJobName">任务名</param>
/// <param name="pStrCronExpress">触发器表达式</param>
public static void ModifyJobTime(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary)
{
try
{
IScheduler sched = schedulerFactory.GetScheduler();
TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME);
ICronTrigger trigger = (ICronTrigger)sched.GetTrigger(triggerKey);
if (trigger == null)
{
return;
}
RemoveJob(pStrJobName);
addJob(pStrJobName, pStrCronExpress,pDictionary);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
#endregion #region 启动,关闭Job
/// <summary>
/// 启动所有定时任务
/// </summary>
public static void startJobs()
{
try
{
IScheduler sched = schedulerFactory.GetScheduler();
sched.Start();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
} /// <summary>
/// 关闭所有定时任务
/// </summary>
public static void ShutdownJobs()
{
try
{
IScheduler sched = schedulerFactory.GetScheduler();
if (!sched.IsShutdown)
{
sched.Shutdown();
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
#endregion }
调用方法也很简单
1 QuartzManager<MyJob>.addJob(jobnName, cronExpress, dictionary);
2
3 QuartzManager<MyJob>.startJobs();