【发布时间】:2017-04-20 20:17:42
【问题描述】:
我的目标是创建一个队列系统,我可以在其中为每个组指定最大数量的并发作业,即对于组 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
}
}
【问题讨论】:
标签: java quartz-scheduler quartz