Quartz阻止jobToBeExecuted

时间:2016-12-06 08:47:31

标签: java quartz-scheduler quartz

我的目标是创建一个队列系统,我可以为每个组指定最大并发作业数量,即对于组A,最多3个作业应该同时运行,对于B组最大Y作业等。作业可以使用SimpleTrigger只能在cron计划和一次执行,因此我在调度作业时无法检查队列,我必须在执行之前或执行期间检查它。我正在实现一个joblistener,我试图阻止jobToBeExecuted()方法中的执行。我已经尝试过scheduler.interrupt()但是当作业尚未启动时它不起作用。 scheduler.deletejob()和scheduler.unschedule()没有阻止它执行任何一个。

有什么想法吗?

public class JobQueueListener implements JobListener {

@Override
public void jobToBeExecuted(JobExecutionContext context) {
     JobKey currentJobKey = context.getJobDetail().getKey();
     JobDetail jobDetail = context.getJobDetail();
     Scheduler scheduler = context.getScheduler();

     if (shouldBePutInQueue(currentJobKey)) {
          /// Prevent execution and put in queue here, but how?
     }
}

@Override
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
       //Check queue and execute next in queue
}

}

1 个答案:

答案 0 :(得分:1)

你能看一下TriggerListener

吗?

你应该实现TriggerListener并在“vetoJobExecution”方法中使用你的中止逻辑。

init(placemark:)
  

当触发器触发时由调度程序调用,并且它的关联JobDetail即将被执行。如果实现禁止执行(通过返回true),则不会调用作业的execute方法。