zoukankan      html  css  js  c++  java
  • 开源作业调度框架

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

    下面是错误代码,这样并不能得知系统中是否已经存在该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);
        }
    }
  • 相关阅读:
    随便发泄几句
    四年有感
    测试产品杂谈
    质量管理杂谈
    提升
    下半年工作方向
    测试资源分配
    2013思路
    微博吐槽汇总
    招聘
  • 原文地址:https://www.cnblogs.com/jgjgjg23/p/5622762.html
Copyright © 2011-2022 走看看