【发布时间】:2014-01-08 10:38:16
【问题描述】:
我正在使用带有 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。
知道为什么触发器没有按计划激活吗?
【问题讨论】:
-
您使用的是持久作业存储吗?下一次触发时间是在添加作业并启动调度程序时计算的,使用 RAMJobstore,此信息会在关闭时丢失。
-
是的,这是一件非常重要的事情——我使用的是数据库而不是 RAM 存储,我会将其添加到我的问题中。谢谢
-
还有哪个版本?确保您运行的是最新版本。
-
版本是 2.1.2 ,我会尝试更新。在文档中我找不到相关的错误修复,但我希望升级会有所帮助。谢谢
-
我已经更新到 2.2.1 版,但仍然遇到同样的问题。知道如何修复它或至少分析它吗?谢谢
标签: c# .net cron quartz.net