2014-03-05 1 views
0

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), и поэтому не рекомендуется, но есть ли способ достичь низкой задержки, не прибегая к этому?

Нет ли дополнительного свойства конфигурации, которое на самом деле вызовет «огонь сейчас»?

+0

Почему бы просто не назвать работу вместо делегирования на кварце? –

+0

@PabloLozano - потому что это может быть долгая работа, и запуск кода происходит под управлением ui и не может задерживаться. также потому, что задание - однопользовательское задание (@DisallowConcurrentExecution), вызванное несколькими триггерами, некоторые повторяющиеся, и я не хочу реализовывать блокировку себя – radai

+0

@radai - есть ли у вас решение? –

ответ

0

В документации говорится, что «triggerJob» немедленно сгорит. Проверьте, соответствует ли это требованиям.

quartzScheduler.triggerJob(jobKey); 
+0

Я пробовал это. это дает мне то же самое, что и то, что я описал выше. «немедленно» на самом деле означает «в следующий раз, когда планировщик опросит работу» – radai

Смежные вопросы