在单个触发器中具有多个 cron 计划的 Quartz 调度程序

Quzrtz scheduler with multiple cron schedules in a single trigger

我正在尝试创建一个每天执行两次的 windows 服务。 我成功地使用添加到单个作业的两个触发器创建了它。

var job = JobBuilder.Create<Job>().StoreDurably().WithIdentity("Report_Name", "Report_Group").Build();
            scheduler.AddJob(job, true);

            var trigger_1 = TriggerBuilder.Create()
                                .WithIdentity("Report_Name_1", "Report_Group_A")
                                .StartNow()
                                .WithCronSchedule(string.Format("0 {0} {1} ? * *", Utility.Schedule_StartTime_1.Minute, Utility.Schedule_StartTime_1.Hour)) //0 Min hour
                                .ForJob(job)
                                .Build();

            var trigger_2 = TriggerBuilder.Create()
                               .WithIdentity("Report_Name_2", "Report_Group_B")
                               .StartNow()
                               .WithCronSchedule(string.Format("0 {0} {1} ? * *", Utility.Schedule_StartTime_2.Minute, Utility.Schedule_StartTime_2.Hour)) //0 Min hour
                               .ForJob(job)
                               .Build();

            scheduler.ScheduleJob(trigger_1);
            scheduler.ScheduleJob(trigger_2);

            scheduler.Start();

我可以使用单个触发器来添加多个 cron 计划吗

不可以,触发器只能有一个时间表。

这样做的一个主要原因是为了防止调度程序不清楚如何解决之间的竞争的情况 状况。

假设您的作业有 2 个相交的时间表:假设您想 运行 每 15 分钟和每小时执行一次该作业,执行它最多需要 10 分钟。在这种情况下,您需要指定处理方案的方式,当

  • 一个作业正在执行,但调度程序触发了新的执行。
  • 两个计划都应解雇作业

为了允许处理此类情况,触发器具有诸如优先级和失火指令之类的属性。