开源作业调度框架 - Quartz.NET - 实战使用2

纠正第一篇文章的一个错误代码。

下面是错误代码,这样并不能得知系统中是否已经存在该JobId

//实例化一个作业Key对象,用于获取作业对象或判断是否存在作业时使用。
JobKey jobKey = new JobKey(identity);

//通过作业Ke对象 获取已经添加过同一个作业,(如果没有为NULL)
IJobDetail job = scheduler.GetJobDetail(jobKey);

//检查调度中是否存在该作业,存在并且参数有变化就删除作业。
if (scheduler.CheckExists(jobKey) && job.JobDataMap["cron"].ToString() != cron)
{
    scheduler.DeleteJob(jobKey);
}

正确获取JobKey和IJobDetail对象的方法如下

这种方法使用Job的GroupName组名进行匹配查找,先将该组所有的JobKey返回再进行循环查找,

什么?你没有设置GroupName?

如果没有设置GroupName则GroupName为DEFAULT

当然也可以用GroupMatcher<JobKey>的其它方法进行匹配如

AnyGroup();
GroupContains(string compareTo);
GroupStartsWith(string compareTo);
GroupEndsWith(string compareTo);
GroupEquals(string compareTo);

//首先需要根据组名来查找到JobKey的ISet集合。
GroupMatcher<JobKey> matcher = GroupMatcher<JobKey>.GroupEquals(groupName);

//注意:这里并不是System.Collection中的ISet<T>。
Quartz.Collection.ISet<JobKey> keys = scheduler.GetJobKeys(matcher);

//使用枚举对象循环查找
var en = keys.GetEnumerator();

while (en.MoveNext())
{
    string rowid = en.Current.Name.Replace("reportTime", "");
    if (dt.Select("id='" + rowid + "'").Length == 0)
    {
        LogHelper.AddLog("定时模块", "检测该计划配置信息已不存在,将删除定时计算任务。", "");

        scheduler.DeleteJob(en.Current);
    }
}

 

posted @ 2016-06-28 11:14  jgjg2323  阅读(465)  评论(0编辑  收藏  举报