2014-01-08 52 views
0

我正在使用quartz.net和CRON調度。 我失火指令設置爲:火和着手:Quartz.net - 失火指示不起作用

trigger = Quartz.TriggerBuilder.Create() 
         .WithIdentity(jobData.JobId, jobData.ClientApplicationId.ToString())//.WithCronSchedule(scheduleInfo.CronExpression, WithMisfireHandlingInstructionDoNothing()) 
         .WithSchedule(Quartz.CronScheduleBuilder.CronSchedule(new Quartz.CronExpression(scheduleInfo.CronExpression)).WithMisfireHandlingInstructionFireAndProceed())//.WithMisfireHandlingInstructionDoNothing()) ///.WithMisfireHandlingInstructionFireAndProceed() 
         .StartAt(DateTime.Now).ForJob(iJobDetail) 
         .Build(); 

從我讀,如果觸發被錯過了,它應儘快調度高達 (一次最大火,即使作業是假設運行很多次)。

由於某些原因,當我測試它時,工作從不觸發。 假設我有一份工作應該從4:00開始每小時運行一次。 我在7:30打開調度程序,直到8:00才觸發任何觸發器。 misfireThreshold設置爲(60000) - 一分鐘。

工作是國家政府,不允許併發運行。 我正在使用持久性存儲(AdoJobStore) - 將計劃保存到MSSQL DB。

任何想法爲什麼觸發器不按計劃激活觸發?

+1

您使用的是持久的工作專賣店?下一次着火時間是在添加作業和調度程序開始時計算的,RAMJobstore在關閉時會丟失此信息。 –

+0

是的,這是一個非常重要的事情 - 我使用的是數據庫而不是RAM存儲,我會將其添加到我的問題中。謝謝 –

+1

還有哪個版本?確保你正在運行最新版本。 –

回答

-1

嘗試使用PauseJob(jobKey)方法來missfire

使用ResumeJob(jobKey)方法再次觸發它

例如:

集cronexpression:每4小時

在7:30,致電pauseJob方法

並在8點01分,致電resumeJob方法

8:00的工作將被重新調整

+0

這是測試目的嗎?我通過關閉調度程序來測試,改變計算機的時間並再次打開調度程序 –

0

請嘗試下面的代碼。確保使用您自己的cron表達式替換{YourCronExpressionString}。

trigger = Quartz.TriggerBuilder.Create() 
        .WithIdentity(jobData.JobId, jobData.ClientApplicationId.ToString()) 
        .WithCronSchedule("{YourCronExpressionString}", x => x.WithMisfireHandlingInstructionFireAndProceed()) 
        .StartAt(DateTime.Now).ForJob(iJobDetail) 
        .Build(); 

來源:Quartz.NET setting MisfireInstruction