進出口使用石英春天通過JDBC工作存儲庫的支持,和IM在試圖使其觸發一個作業「現在」:如何減少石英調度延遲
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毫秒)。
據我所知,將其設置爲低可能會導致數據庫抖動(即使用jdbc作業存儲),因此不推薦使用,但有什麼方法可以實現低延遲而不訴諸於此?
是否有沒有可選的配置屬性,會導致「現在火」實際上做?
爲什麼不只是調用這個工作,而是委託Quartz? –
@PabloLozano - 因爲它可能是一個長期的工作,並觸發它的代碼是ui-backed,不能延遲。也因爲工作是一個單身人士工作(@ DisallowConcurrentExecution)由多個觸發器觸發,一些重複,我不想實現鎖定自己 – radai
@radai - 你有任何解決方案? –