Quartz Scheduler - 使用JobDataMap进行作业链接

时间:2015-03-27 19:59:48

标签: java quartz-scheduler job-scheduling

我是Quartz Scheduler的新手,并且有以下要求

我需要有两份工作。根据第一份工作回复,第二份工作需要立即触发。

我为jon chaining读了不同的appraches,经过列表后,我终于找到了JobDataMap方法。

第一份工作:

public void method callJob()
JobDetail jobDetail = JobBuilder.newJob(DataProcurementJob.class)
                                  .withIdentity("Job1, "JobGroup1")
                                  .build();

            JobDataMap jobDataMap = jobDetail.getJobDataMap();
            jobDataMap.put("NEXT_JOB", "com.abc.test.Jobs.DataLoadJob");
            jobDataMap.put("PARAM1", "VALUE1");
            jobDataMap.put("PARAM2", "VALUE2");

            Trigger trigger = TriggerBuilder.newTrigger()
                             .withIdentity("DataProcurementTrigger1",                        "DataProcurementTrigger")
                              .withSchedule(
                            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                              .build() ;

            //Schedule it

            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.scheduleJob(jobDetail,trigger);
            scheduler.start();

}

Execute Method class : 
public job1Class implements job {
If (condition == false){
      keep running Job1
}
else 
{ 
Call Job2
}
}

我已实现上述代码,但第二项工作尚未启动。我正在Job 2中打印一份声明。

有人可以建议如何只调用一次secon作业吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用JobChainingJobListener:

,而不是使用JobDataMap
JobChainingJobListener chain = new JobChainingJobListener();
chain.addJobChainLink(job1.getKey(), job2.getKey());

您必须安排job1并将job2添加到调度程序:

scheduler.add(job2, false);
scheduler.scheduleJob(job1, trigger);
scheduler.start();

并且你的job2必须是持久的(param storeDurably)。