我正在使用具有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。
知道为什么触发器没有按计划激活而触发?
答案 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();
答案 1 :(得分:-1)
尝试使用PauseJob(jobKey)方法进行拼错
使用ResumeJob(jobKey)方法再次触发
例如:
设置cronexpression:每4小时
在7:30,调用pauseJob方法
和8:01,调用resumeJob方法
8:00的工作将被重新启动