2015-10-07 65 views
0

我有一個石英作業調度像這樣:石英隊列調度錯過了預定作業

_scheduler.ScheduleJob(job, 
    TriggerBuilder.Create().ForJob(job) 
     .WithSimpleSchedule(x =>            
     x.WithIntervalInSeconds(requeryTime.ToInt32()) 
     .RepeatForever() 
     .WithMisfireHandlingInstructionNowWithRemainingCount()            
    )           
    .StartNow() 
    .Build()) 

爲了測試我有計劃運行每隔10秒。如果我暫停服務,然後恢復,我仍然可以看到所有被調用的工作。我希望Quartz忽略(不排隊)作業並恢復計劃。 例如如果作業每10秒運行一次,並暫停服務1分鐘,則我會連續快速運行6個作業。

我該如何着手確保Quartz忽略這些工作?

+0

對此的評論? – LeftyX

+0

我需要重新評估導致這種情況的條件。我在控制檯窗口中暫停我的應用程序,我不確定這是一個好的測試。暫停應用程序有效地暫停石英調度程序,並一次安排所有作業(排隊)。我不確定這是否與正在安排的工作相同,但它已經很忙。 – user183872

回答

0

短的答案是改變misfireThreshold在配置:

<add key="quartz.jobStore.misfireThreshold" value="60000" /> 

缺省值是60000毫秒(60秒)。

org.quartz.jobStore.misfireThreshold

的調度會「容忍」觸發 路過它的下火的時候,被認爲之前的毫秒數「啞火」。 默認值(如果您沒有在 配置中輸入此屬性)是60000(60秒)。

由於您的觸發器每10秒運行一次,您可以將閾值降低到9秒,並且它應該按照您的預期工作。

如果你想了解更多有關策略,你可以閱讀articlethis

類似的問題已被詢問recenlty和Circular Reference給了一個非常好的answer