1

假设我们有一个作业和相应的触发器配置如下:

var jobKey = new JobKey(typeof(HelloJob).Name, typeof(HelloJob).Name);
        IJobDetail job = JobBuilder.Create<HelloJob>()
            .WithIdentity(jobKey)
            .RequestRecovery()
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
          .WithIdentity(string.Format("{0}Trigger", typeof(HelloJob).Name), typeof(HelloJob).Name)
          .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
          .WithSimpleSchedule(x => x
              .WithIntervalInSeconds(1)
              .WithRepeatCount(9))
          .Build();

使用“quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz”。

好吧,我希望这项工作在正常情况下执行 10 次,当然它会执行。问题是如果在其生命周期中发生任何停止,我希望该作业继续剩余的重复计数。

例如,当作业的第五次执行完成时我停止程序,而下一次运行程序时,我只想再执行五次作业,但它执行了 10 次。

我应该如何配置调度程序、作业和触发器才能做到这一点?

4

2 回答 2

1

您可以通过在程序执行之间存储剩余计数来做到这一点:

  • 在程序“停止”上,将剩余计数保存在外部存储(文件、数据库等)中。实际上最好的方法是在每次作业执行后执行此操作。
  • 在程序“开始”上从存储中读取值并使用它.WithRepeatCount()而不是常量。
于 2016-12-05T10:18:32.593 回答
1

确保创建数据库对象并配置作业存储。

看这个例子。它可以帮助你。

https://github.com/Leftyx/QuartzNetAdoJobStoreSQLite

于 2016-12-05T13:22:07.630 回答