java - 如何让StatefulJobs连续运行(而不是同时运行)?

标签 java quartz-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 阻止具有相同 key 的作业的多个实例同时运行。虽然我使用不同的键创建了作业。

关于java - 如何让StatefulJobs连续运行(而不是同时运行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38481119/

相关文章:

java - 如何在java中使用Arrays.equals()比较对象数组?

java - 在 Java Scheduler Quartz Cron 中设置多个时区

java - quartz | Cron 表达式未按预期工作

java - 在Quartz的JobDataMap中传递BlockingQueue

java - 来自 jobkey 的 Quartz jobdetail 为空

java - 无法执行gwt :compile during maven compile phase

java - Spring Singleton Scope 是如何进行垃圾回收的?

Java 时区转换产生相反的结果。

java - 使用 java 迭代 JSON 响应中存在的最后一个值

c# - Quartz.Net 初始化项目