Quartz.net - 失火指令不起作用

时间:2014-01-08 10:38:17

标签: c# .net cron 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点开始每小时运行一次。 我在7:30打开调度程序,我没有触发任何触发器 - 直到8点。 misfireThreshold设置为(60000) - 一分钟。

该作业是statefuul,不允许并发运行。 我正在使用持久性存储(AdoJobStore) - 将计划保存到MSSQL DB。

知道为什么触发器没有按计划激活而触发?

2 个答案:

答案 0 :(得分:0)

请尝试使用以下代码。确保将{YourCronExpressionString}替换为您自己的cron表达式。

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

答案 1 :(得分:-1)

尝试使用PauseJob(jobKey)方法进行拼错

使用ResumeJob(jobKey)方法再次触发

例如:

设置cronexpression:每4小时

在7:30,调用pauseJob方法

和8:01,调用resumeJob方法

8:00的工作将被重新启动