Misfired 简单触发器正在执行作业,尽管将 misfire 策略设置为 "IGNORE"
Misfired Simple triggers are executing Jobs in spite of Setting misfire policy to "IGNORE"
我在 .Net 中使用 Quartz。
不管 "quartz.jobStore.misfireThreshold" 我设置和设置失火策略以忽略,我仍然看到作业正在执行。
理想情况下,这永远不会发生。
我已经为同一个对象初始化了 JobListener 和 Trigger 侦听器
这是我的片段
var props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" },
{"quartz.threadPool.threadCount","1" },
{"quartz.jobStore.misfireThreshold","3000" }
};
var schedulerFactory = new StdSchedulerFactory(props);
// get a scheduler
var scheduler = await schedulerFactory.GetScheduler();
//scheduler.CheckExists()
await scheduler.Start();
var job3 = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob3", "group3")
.UsingJobData("jobSays", "Hello World 333333")
.UsingJobData("myFloatValue", 9.423f)
.Build();
var trigger3 = TriggerBuilder.Create()
.WithIdentity("trigger3", "group3")
.WithSimpleSchedule(x => x
.WithMisfireHandlingInstructionIgnoreMisfires())
.StartAt(DateTimeOffset.UtcNow)
.Build();
await scheduler.ScheduleJob(job3, trigger3);
.WithMisfireHandlingInstructionIgnoreMisfires()
尽快触发所有错过的触发器,然后返回到正常计划。您应该使用 .WithMisfireHandlingInstructionDoNothing()
,触发器明确设置 "MISFIRE_INSTRUCTION_DO_NOTHING" 失火指令处理程序,这意味着所有失火的执行都将被丢弃,它只是等待下一个预定时间。如果触发器 "misses" 其触发时间发生失火,因为在 Quartz 的线程池中没有可用的线程来执行作业
我在 .Net 中使用 Quartz。 不管 "quartz.jobStore.misfireThreshold" 我设置和设置失火策略以忽略,我仍然看到作业正在执行。
理想情况下,这永远不会发生。
我已经为同一个对象初始化了 JobListener 和 Trigger 侦听器 这是我的片段
var props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" },
{"quartz.threadPool.threadCount","1" },
{"quartz.jobStore.misfireThreshold","3000" }
};
var schedulerFactory = new StdSchedulerFactory(props);
// get a scheduler
var scheduler = await schedulerFactory.GetScheduler();
//scheduler.CheckExists()
await scheduler.Start();
var job3 = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob3", "group3")
.UsingJobData("jobSays", "Hello World 333333")
.UsingJobData("myFloatValue", 9.423f)
.Build();
var trigger3 = TriggerBuilder.Create()
.WithIdentity("trigger3", "group3")
.WithSimpleSchedule(x => x
.WithMisfireHandlingInstructionIgnoreMisfires())
.StartAt(DateTimeOffset.UtcNow)
.Build();
await scheduler.ScheduleJob(job3, trigger3);
.WithMisfireHandlingInstructionIgnoreMisfires()
尽快触发所有错过的触发器,然后返回到正常计划。您应该使用 .WithMisfireHandlingInstructionDoNothing()
,触发器明确设置 "MISFIRE_INSTRUCTION_DO_NOTHING" 失火指令处理程序,这意味着所有失火的执行都将被丢弃,它只是等待下一个预定时间。如果触发器 "misses" 其触发时间发生失火,因为在 Quartz 的线程池中没有可用的线程来执行作业