基于Quartz2.3.3的帮助类 QuartzHelper

using System;
using System.Collections.Generic;
using Quartz;
using Quartz.Core;
using Quartz.Impl;
using Quartz.Impl.Triggers;
using Kmmp.Core.Models;

namespace Kmmp.Core.Helper
{
/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:定时任务
/// </summary>
public class QuartzHelper
{
private static readonly ISchedulerFactory schedulerFactory;

static QuartzHelper()
{
System.Collections.Specialized.NameValueCollection properties = new System.Collections.Specialized.NameValueCollection();
properties["quartz.threadPool.threadCount"] = AppSettingHelper.GetInt("quartz.threadPool.threadCount", 10).ToString();
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool,Quartz";
properties["quartz.threadPool.threadPriority"] = "Normal";
schedulerFactory = new StdSchedulerFactory(properties);
}

/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:添加一个job(新的job)
/// </summary>
/// <param name="groupName">分组名称</param>
/// <param name="jobName">job名称</param>
/// <param name="cls">类名格式:Kemai.MSG.Business.Jobs.PayReverseJob, Kemai.MSG.Business</param>
/// <param name="time">调度时间</param>
/// <param name="isDurable"></param>
/// <param name="requestsRecover"></param>
/// <param name="parameters">参数</param>
public static KmmResult<bool> AddJob(string groupName, string jobName, string cls, string time, bool isDurable = true, bool requestsRecover = false, Dictionary<string, object> parameters = null)
{
try
{
string[] arr = cls.Split(',');
var type = ObjectFactoryHelper.CreateInstanceType(arr[1].Trim(), arr[0].Trim());
return AddJob(groupName, jobName, type, time, isDurable, requestsRecover, parameters);
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// Author:renfei
/// Date:2016-04-13
/// Desc:添加一个job(新的job)
/// </summary>
/// <param name="groupName">分组名称</param>
/// <param name="jobName">job名称</param>
/// <param name="cls">类名格式:Kemai.MSG.Business.Jobs.PayReverseJob, Kemai.MSG.Business</param>
/// <param name="time">调度时间</param>
/// <param name="jobtype">作业类型</param>
/// <param name="isDurable"></param>
/// <param name="requestsRecover"></param>
public static KmmResult<bool> AddJob(string groupName, string jobName, string cls, string time, string jobtype, bool isDurable = true, bool requestsRecover = false, Dictionary<string, object> parameters = null)
{
try
{
string[] arr = cls.Split(',');
var type = ObjectFactoryHelper.CreateInstanceType(arr[1].Trim(), arr[0].Trim());
return AddJob(groupName, jobName, type, time, isDurable, jobtype, requestsRecover, parameters);

}
catch (Exception ex)
{
SysLogHelper.Error(ex);
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:增加job
/// </summary>
/// <param name="groupName">分组名称</param>
/// <param name="jobName">job名称</param>
/// <param name="type">job类</param>
/// <param name="time">调度时间</param>
/// <param name="isDurable"></param>
/// <param name="requestsRecover"></param>
public static KmmResult<bool> AddJob(string groupName, string jobName, Type type, string time, bool isDurable, string jobtype, bool requestsRecover, Dictionary<string, object> parameters = null)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
IJobDetail jobDetail = new JobDetailImpl(jobName, groupName, type, isDurable, requestsRecover);
if (parameters != null)
{
foreach (var param in parameters)
{
jobDetail.JobDataMap.Add(param.Key, param.Value);
}
}
ICronTrigger trigger = new CronTriggerImpl(jobName, groupName);
trigger.CronExpressionString = time;
if (!string.IsNullOrEmpty(jobtype))
jobDetail.JobDataMap["jobtype"] = jobtype;
scheduler.ScheduleJob(jobDetail, trigger);

if (!scheduler.IsShutdown)
{
scheduler.Start();
return result.Success(true);
}
return result.ErrorMsg("Quartz的调度器已关闭");
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

public static KmmResult<bool> AddJob(string groupName, string jobName, Type type, string time, bool isDurable, bool requestsRecover, Dictionary<string, object> parameters = null)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
IJobDetail jobDetail = new JobDetailImpl(jobName, groupName, type, isDurable, requestsRecover);
if (parameters != null)
{
foreach (var param in parameters)
{
jobDetail.JobDataMap.Add(param.Key, param.Value);
}
}
ICronTrigger trigger = new CronTriggerImpl(jobName, groupName);
trigger.CronExpressionString = time;
scheduler.ScheduleJob(jobDetail, trigger);
if (!scheduler.IsShutdown)
{
scheduler.Start();
return result.Success(true);
}
return result.ErrorMsg("Quartz调度器已关闭");
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

public static KmmResult<bool> AddJob(string groupName, string jobName, Type type, string time, bool isDurable, bool requestsRecover, JobDataMap jobdata)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
IJobDetail jobDetail = new JobDetailImpl(jobName, groupName, type, isDurable, requestsRecover);

if (jobdata != null)
{
foreach (var d in jobdata)
{
jobDetail.JobDataMap.Add(d.Key, d.Value);
}
}
ICronTrigger trigger = new CronTriggerImpl(jobName, groupName);
trigger.CronExpressionString = time;
jobDetail.JobDataMap["jobtype"] = type.ToString();
scheduler.ScheduleJob(jobDetail, trigger);

if (!scheduler.IsShutdown)
{
scheduler.Start();
return result.Success(true);
}
return result.ErrorMsg("Quartz调度器已关闭");
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:修改时间
/// </summary>
/// <param name="groupName">组名</param>
/// <param name="jobName">job名称</param>
/// <param name="time">调度时间</param>
public static KmmResult<bool> ModifyJobTime(string groupName, string jobName, string time)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
ICronTrigger trigger = (CronTriggerImpl)scheduler.GetTrigger(new TriggerKey(jobName, groupName));
if (trigger != null && !trigger.CronExpressionString.Equals(time))
{
IJobDetail jobDetail = scheduler.GetJobDetail(new JobKey(jobName, groupName));
if (jobDetail != null)
{
RemoveJob(groupName, jobName);
AddJob(groupName, jobName, jobDetail.JobType, time, true, false, jobDetail.JobDataMap);
return result.Success(true);
}
else
{
result.ErrorMsg("该Quartz-Job不存在");
}
}
else
{
result.ErrorMsg("该Quartz-Job的触发器不存在");
}
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
result.ErrorMsg(ex.Message);
}
return result;
}

/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:移除job
/// </summary>
/// <param name="groupName">分组名称</param>
/// <param name="jobName">job名称</param>
public static KmmResult<bool> RemoveJob(string groupName, string jobName)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.PauseTrigger(new TriggerKey(jobName, groupName));
scheduler.UnscheduleJob(new TriggerKey(jobName, groupName));
scheduler.DeleteJob(new JobKey(jobName, groupName));
return result.Success(true);
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:唤醒一个job(job已经存在)
/// </summary>
/// <param name="groupName">分组名</param>
/// <param name="jobName">job名称</param>
public static KmmResult<bool> ResumeJob(string groupName, string jobName)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.ResumeJob(new JobKey(groupName, jobName));
return result.Success(true);
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// Author:tiny.wu
/// Date:2016-04-01
/// Desc:暂停一个job
/// </summary>
/// <param name="groupName">分组名</param>
/// <param name="jobName">job名称</param>
public static KmmResult<bool> PauseJob(string groupName, string jobName)
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.PauseJob(new JobKey(groupName, jobName));
return result.Success(true);
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// 启动所有job
/// </summary>
public static KmmResult<bool> StartJobs()
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.Start();
return result.Success(true);
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// 停止所有job
/// </summary>
public static KmmResult<bool> ShutdownJobs()
{
KmmResult<bool> result = new KmmResult<bool>();
result.data = false;
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.Shutdown();
return result.Success(true);
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
return result.ErrorMsg(ex.Message);
}
}

/// <summary>
/// 查询一个job add by yzl@20181011
/// </summary>
/// <param name="groupName"></param>
/// <param name="jobName"></param>
/// <returns></returns>
public static KmmResult<string> GetJob(string groupName, string jobName)
{
KmmResult<string> result = new KmmResult<string>();
try
{
IScheduler scheduler = schedulerFactory.GetScheduler();
ICronTrigger trigger = (CronTriggerImpl)scheduler.GetTrigger(new TriggerKey(jobName, groupName));
if (trigger != null)
{
IJobDetail jobDetail = scheduler.GetJobDetail(new JobKey(jobName, groupName));
if (jobDetail != null)
{
string json = JsonHelper.JsonConvertSerialize(new { GroupName = groupName, JobName = jobName, DataType = jobDetail.JobType.AssemblyQualifiedName + "," + jobDetail.JobType.FullName, CronStr = trigger.CronExpressionString });
return result.Success(json);
}
else
{
result.ErrorMsg("该Quartz-Job不存在");
}
}
else
{
result.ErrorMsg("该Quartz-Job的触发器不存在");
}
}
catch (Exception ex)
{
SysLogHelper.Error(ex);
result.ErrorMsg(ex.Message);
}
return result;
}


}
}

原文地址:https://www.cnblogs.com/opts/p/11781186.html