• quartz项目中的运用


    下面是之前项目中quartz的运用,我将它梳理出来。




    测试类:

    public class OrdExpireTaskMain {
        public static void main(String[] args) {
            String[]agrs=new String[]{"EXPIRE_TASK_571_CS","1","0"};
            try {
                TaskFrameWork.main(agrs);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    上面的测试类一个参数是CFG_TASK_TYPE_CODE,第二个取模,第三个是根据值进行取模,通过调用框架的main函数,来执行调度任务。

    1:首先根据先获取任务的一个配置文件,通过配置文件我们可以更灵活。比如可以配置调度表达式,名称等
    代码片段

      Properties prop = ResourceUtil.loadPropertiesFromClassPath("task/task.properties", "task", true);
           if ((!(StringUtils.isBlank(prop.getProperty("bootPauseSeconds"))))&& (StringUtils.isNumeric(prop.getProperty("bootPauseSeconds"))))
               {
                   bootPauseSeconds = Long.parseLong(prop.getProperty("bootPauseSeconds").trim());
               }


    注:bootPauseSeconds 是当前任务启动暂停时间
    2:new StdSchedulerFactory(prop)一个 对象,
    根据这个对象get一个调度实例(scheduler)
        -----> 然后设置任务明细(JobDetail),调度策略(Trigger)
        ----->然后启动任务(start)
        ----->sleep当前线程
    3:这个调度的实现类是TaskScanJob
    taskScanJob:这个任务类是从csf_task 表中取出任务数据
    代码片段

                JobDataMap data = context.getJobDetail().getJobDataMap();
    
                String taskType = data.getString("TASK_TYPE");
                long mod = data.getLong("DATASPLIT_MOD");
                long value = data.getLong("DATASPLIT_VALUE");
    
                ITaskSV objITaskSV = (ITaskSV)ServiceFactory.getService(ITaskSV.class);
                IBOCfgTaskValue[] objIBOCfgTaskValue = objITaskSV.getCfgTaskByTaskType(taskType, mod, value);


    判断当前是否还有任务在执行,根据当前任务的任务名称和任务组名称,如果相等就是有任务上次扫描的任务在执行,就等待这次扫描的任务执行完。

    如果不相等就在之前的context重置他的scheduler 调度任务,创建过程:
    (1)创建JobDetail, jobDetail 的任务类是taskJob.class
    (2)创建Trigger 首先取出csgTaskValue中的taskMethod,判断如果是C,就创建CronTrigger;如果不是就创建SimpleTrigger
    (3)在当前的jobDataMap中put  TASK_CFG_ID
    (4)重置调度任务


    taskJob.class 类是处理cfgTaskValue的类,也是调度我们处理任务的真正实现类
    (1)取出 TASK_CFG_ID 的id,查出cfgTaskValue,cfgTaskValue 就是保存处理数据的value。首先记录value的日志。
    (2)根据value的businessClass,获取class的实例
    (3)调用业务类的doTask
    (4)并将task的执行结果update到日志表中

  • 相关阅读:
    HDU 1202 The calculation of GPA
    HDU 1201 18岁生日
    HDU 1200 To and Pro
    C语言实现的图的深度搜索与广度搜索程序
    深度优先搜索和广度优先搜索的深入讨论
    Linux sftp 安全文件传输命令
    看白鹿原有感
    中国人民抗日战争暨世界反法西斯战争胜利70周年(20150903)
    高一的我曾对自己说"要放慢脚步去生活"!?
    网络营销(续)
  • 原文地址:https://www.cnblogs.com/zhangXingSheng/p/7491713.html
Copyright © 2020-2023  润新知