簡體   English   中英

從正在運行的作業本身更新 QuartzJob

[英]Updating a QuartzJob from the running job itself

spring 引導應用程序中的 QuartzJob 更新在作業運行時有效( 此處此處)。 spring 變量spring.quartz.overwrite-existing-jobs: true已設置。

但是,當從正在運行的作業中執行相同操作時,作業會在無限循環中不斷觸發自身,而不考慮間隔時間(每隔幾毫秒它會再次觸發)。 我什至嘗試在 TriggerListener 中做同樣的事情,但這並沒有改變它。

作為代碼示例,除了上面第二個鏈接中給出的內容之外,我將一無所有:

// retrieve the trigger
Trigger oldTrigger = sched.getTrigger(triggerKey("oldTrigger", "group1");

// obtain a builder that would produce the trigger
TriggerBuilder tb = oldTrigger.getTriggerBuilder();

// update the schedule associated with the builder, and build the new trigger
// (other builder methods could be called, to change the trigger in any desired way)
Trigger newTrigger = tb.withSchedule(simpleSchedule()
    .withIntervalInSeconds(10)
    .withRepeatCount(10)
    .build();

sched.rescheduleJob(oldTrigger.getKey(), newTrigger);

有人從正在運行的工作中嘗試過嗎?

它適用於以下觸發器。 正是 startAt 有所作為。 否則,觸發器會立即再次觸發。

Trigger trigger = newTrigger()
.withIdentity(triggerName, groupname)
.startAt(Date.from(LocalDateTime.now().plusSeconds(intervalInSeconds).atZone(ZoneId.systemDefault()).toInstant()))
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
    .withIntervalInSeconds(intervalInSeconds)
    .repeatForever()
    .withMisfireHandlingInstructionIgnoreMisfires())
    .build();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM