纠正第一篇文章的一个错误代码。
下面是错误代码,这样并不能得知系统中是否已经存在该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); } }