这是我的石英配置:
<quartz>
<add key="quartz.scheduler.instanceName" value="EmailScheduler" />
<!-- Configure Thread Pool -->
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="Normal" />
<!-- Configure Job Store -->
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
<add key="quartz.dataSource.default.connectionString" value="data source= ......" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
</quartz>
这是我的IInterruptableJob
:
public class JobC : Quartz.IInterruptableJob
{
public void Interrupt()
{
Console.WriteLine("Job Interrupt() called at " + DateTime.Now);
}
public void Execute(IJobExecutionContext context)
{
// what code I should write here to detect misfires???
Console.WriteLine("FireTime at " + context.FireTimeUtc.Value + " PreviousFireTime at:" + (context.PreviousFireTimeUtc.HasValue ? context.PreviousFireTimeUtc.Value.ToString() : "NULL"));
}
}
这是我的工作和触发器:
var job = JobBuilder.Create<JobC>().WithIdentity(new JobKey("JobC")).RequestRecovery(true).Build();
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x
.RepeatForever()
.WithIntervalInSeconds(2)
// I'm ignoring misfires here, but seems it doesn't work!
.WithMisfireHandlingInstructionIgnoreMisfires())
.StartNow()
.Build();
var scheduler = new Quartz.Impl.StdSchedulerFactory().GetScheduler();
scheduler.Start();
scheduler.ScheduleJob(job, trigger);
在我调用scheduler.PauseAll()
所有工作暂停并调用scheduler.ResumeAll()
所有未命中的火灾之后,被解雇!但我想忽略它们,从现在开始继续。
提前致谢。