【问题标题】:Quartz job excecuted at pool startup with StartAt()使用 StartAt() 在池启动时执行 Quartz 作业
【发布时间】:2017-04-24 16:50:11
【问题描述】:

我现在使用 一段时间来重复任务,它工作得很好。出于某种原因,我需要创建一个在两天内运行的任务。这是我所做的实现:

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();

IJobDetail jobWeekEnd = JobBuilderExtend.Create<CreateConsultationReplayJob>(() => new StandardContextProvider());
ITrigger triggerWeekend = TriggerBuilder.Create()
                                        .WithIdentity("Foo", "Bar")
                                        .WithCronSchedule("0 0 9 ? * SAT-SUN")
                                        .ForJob(jobWeekEnd)
                                        .Build();

scheduler.ScheduleJob(jobWeekEnd, triggerWeekend); // WORKS WELL

var jobNonWorkingDay = JobBuilderExtend.Create<CreateConsultationReplayJob>(() => new StandardContextProvider());
var trigger1 = TriggerBuilder.Create()
                             .WithIdentity("Foo2", "Bar")
                             .StartAt(new DateTimeOffset(new DateTime(2017, 04, 17, 09, 00, 00)))
                             .ForJob(jobNonWorkingDay)
                             .Build();
scheduler.ScheduleJob(jobNonWorkingDay, trigger1);

var jobNonWorkingDay2 = JobBuilderExtend.Create<CreateConsultationReplayJob>(() => new StandardContextProvider());
var trigger2 = TriggerBuilder.Create()
                              .WithIdentity("Foo3", "Bar3")
                              .StartAt(new DateTimeOffset(new DateTime(2017, 05, 01, 09, 00, 00)))
                              .ForJob(jobNonWorkingDay2)
                              .Build();
scheduler.ScheduleJob(jobNonWorkingDay2, trigger2);

trigger1 和 trigger2 似乎不是在正确的时间触发,而是每次我回收池时,并且随机地,最后一次出现是在 11:16:15。

关于我应该在哪里挖掘的任何线索?

【问题讨论】:

  • 看来您使用的是 Quartz.NET,我编辑了您的问题以设置正确的标签。
  • @walen 感谢更新
  • 在安排好作业后尝试启动调度程序。 1) scheduler.ScheduleJob(...) 2) scheduler.Start();

标签: quartz quartz.net


【解决方案1】:

由于第一个调度程序的日期是过去 (new DateTime(2017, 04, 17, 09, 00, 00)) 并且没有定义 EndAt,因此触发器在启动时触发一次。从这个信息中,有两个选择:

  1. 使用EndAt() 设置结束值 - 快速且干净
  2. 用日期检查包围初始化 - 对下一个读者来说不是简单的解决方案,但要避免无用的工作注册。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2014-09-17
    相关资源
    最近更新 更多