如何使 StatefulJobs 运行 连续(不是同时)?

How to make StatefulJobs run consecutively (not concurrently)?

我有一个 scheduler:

                SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory("quartz.properties");
                sched = schedFact.getScheduler();
                sched.start();
                JobDetail jobDetail;
                CronTrigger trigger;
                for (ReportDetails report : reports) {
                    jobDetail = new JobDetail(report.getName() + _REPORT, GRP, ReportJob.class);
                    jobDetail.getJobDataMap().put(ReportJob.DATA_REPORT, report);
                    sched.addJob(jobDetail, true);
                    if (report.getCronExp() != null && report.getCronExp().length() > 0) {
                        trigger = new CronTrigger(report.getName() + _TRIGGER, GRP);
                        trigger.setCronExpression(report.getCronExp());
                        trigger.setJobGroup(GRP);
                        trigger.setJobName(report.getName() + _REPORT);
                        sched.scheduleJob(trigger);
                    }
                }

还有我的 job 实例:

public class ReportJob implements StatefulJob {
    private static final Logger logger = Logger.getLogger(ReportJob.class);
    public void execute(JobExecutionContext context) throws JobExecutionException {
        ReportDetails report = (ReportDetails) context.getJobDetail().getJobDataMap().get(DATA_REPORT);
        report.getLogger().info("job for report started");
        ...
        report.getLogger().info("Job for report ended");
    }
}

问题是,尽管 ReportJob 实现了 StatefulJob,但确实同时 运行 个作业。

QuartzScheduler_Worker-1 | job for report started

QuartzScheduler_Worker-2 | job for report started

QuartzScheduler_Worker-2 | job for report ended

QuartzScheduler_Worker-1 | job for report ended

我希望他们 运行 连续,一个接一个。如何解决这个问题?

我明白了我的错误:StatefulJob 阻止了 运行 同时使用相同密钥的作业的多个实例。虽然我使用不同的密钥创建了作业。