Im использование Quartz под Spring подкрепленной JDBC магазина работы, и им пытаются сделать это запустить работу «сейчас»:как уменьшить кварц планирование задержки
Trigger adHocTrigger = TriggerBuilder.newTrigger().withIdentity(adHocTriggerKey).forJob(jobKey).startNow().build();
quartzScheduler.scheduleJob(adHocTrigger); //now
измеренная задержка между этим вызовом и временем работа на самом деле начинает выполняться по умолчанию - 30 секунд. вот пример задание для измерения триггера задержки одноразового, что я использовал:
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Trigger trigger = context.getTrigger();
if (!trigger.mayFireAgain()) {
//its a one-off, compute latency
long latency = System.currentTimeMillis() - trigger.getFinalFireTime().getTime();
logger.info("firing latency is {} millis",latency);
}
}
после прочтения the documentation я нашел причина задержки является параметром конфигурации «org.quartz.scheduler.idleWaitTime» (в основном в магазине работы частота опроса?), которая может быть сконфигурирована как 1000 миллисекунд (в этот момент время ожидания составляет порядка 900 миллисекунд).
Я понимаю, что установка этого минимума может привести к дроблению db (им используется хранилище заданий jdbc), и поэтому не рекомендуется, но есть ли способ достичь низкой задержки, не прибегая к этому?
Нет ли дополнительного свойства конфигурации, которое на самом деле вызовет «огонь сейчас»?
Почему бы просто не назвать работу вместо делегирования на кварце? –
@PabloLozano - потому что это может быть долгая работа, и запуск кода происходит под управлением ui и не может задерживаться. также потому, что задание - однопользовательское задание (@DisallowConcurrentExecution), вызванное несколькими триггерами, некоторые повторяющиеся, и я не хочу реализовывать блокировку себя – radai
@radai - есть ли у вас решение? –