我的目标是创建一个队列系统,我可以在其中为每个组指定最大数量的并发作业,即对于 A 组,最多 3 个作业应该同时运行,对于 B 组,最多 Y 个作业等。这些作业可以同时执行在 cron 计划上并且仅使用 SimpleTrigger 一次,因此在调度作业时我无法检查队列,我必须在执行之前或期间检查它。我正在实现一个作业监听器,并试图阻止在 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
}
}