Кварц предотвращает выполнение задания на jobToBeExecuted

Моя цель - создать систему очередей, в которой я могу указать максимальное количество одновременных заданий для каждой группы, то есть для группы 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
}

}

person Johan    schedule 06.12.2016    source источник


Ответы (1)


Можете ли вы взглянуть на TriggerListener

Вы должны реализовать TriggerListener и иметь свою логику прерывания в методе vetoJobExecution.

boolean vetoJobExecution(Trigger trigger,
                     JobExecutionContext context)

Он вызывается планировщиком при срабатывании триггера, и связанный с ним JobDetail вот-вот будет выполнен. Если реализация наложила вето на выполнение (путем возврата true), метод выполнения задания не будет вызван.

person Srinivas    schedule 13.01.2017
comment
Спасибо, именно то, что я искал! - person Johan; 11.05.2017
comment
предоставленная вами ссылка мертва; / - person DrCopyPaste; 09.10.2019
comment
@DrCopyPaste теперь ссылка на документ: TriggerListener (Java) или Интерфейс ITriggerListener (.Net) - person JamesHough; 10.01.2020