【问题标题】:Quartz Scheduler - Job Chaining with JobDataMapQuartz Scheduler - 使用 JobDataMap 进行作业链接
【发布时间】:2015-03-27 19:59:48
【问题描述】:

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

我需要做两份工作。根据第一个作业响应,需要立即触发第二个作业。

我阅读了 jon 链接的不同方法,在浏览了列表之后,我最终确定了 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
}
}

我已经实现了上面的代码,但是第二个工作没有启动。我正在作业 2 中打印一份声明。

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

【问题讨论】:

    标签: java quartz-scheduler job-scheduling


    【解决方案1】:

    您可以尝试使用 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 必须是持久的(参数 storeDurably)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多