Quzrtz调度程序在单个触发器中具有多个cron调度

时间:2017-06-01 16:29:02

标签: cron scheduled-tasks quartz.net

我正在尝试创建一个每天执行两次的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计划

1 个答案:

答案 0 :(得分:2)

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

为什么这样做的主要原因之一是防止在调度程序不清楚如何解决之间的竞争的情况 条件。

想象一下,你有一个有两个相交时间表的工作:让我们说你想每15分钟和每小时运行一次工作,执行它需要10分钟。在这种情况下,您需要在

时指定处理方案的方式
  • 正在执行作业,但调度程序会触发新执行。
  • 两个时间表都应该解雇工作

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