代码之家  ›  专栏  ›  技术社区  ›  Mounhim

Quartz.net的日常工作每分钟都在执行

  •  1
  • Mounhim  · 技术社区  · 11 年前

    我有下面的代码。如果没有设置配置设置,我希望它每天17:00运行,否则将使用配置设置。到目前为止没有问题,变量设置正确。然而:工作不是每天都在执行,而是每分钟都在执行。我不知道为什么。调度程序是否设置不正确?

            TimeSpan timeOfExecution;
    
            if (!TimeSpan.TryParse(ConfigurationManager.AppSettings["TimeOfExecution"], out timeOfExecution))
            {
                timeOfExecution = new TimeSpan(17, 0, 0);
    
            }
    
           var job = JobBuilder.Create<DailyReportJob>()
                .WithIdentity("DailyReportJob")
                .Build();
    
            var trigger = TriggerBuilder.Create()
                .WithIdentity("DailyReportTrigger")
                .WithDailyTimeIntervalSchedule(s => s.OnEveryDay().StartingDailyAt(new TimeOfDay(timeOfExecution.Hours, timeOfExecution.Minutes)))
                .Build();
    
            Scheduler.ScheduleJob(job, trigger);
            Scheduler.ListenerManager.AddJobListener(AutofacJobListener);
            Scheduler.Start();
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   LeftyX    11 年前

    此触发器的默认时间为每分钟,因为您没有指定其他时间。

    您可以使用此代码检查所有间隔:

    var dt = trigger.GetNextFireTimeUtc();
    
    for (int i = 0; i < 10; i++)
    {
        if (dt == null)
            break;
    
        Console.WriteLine(dt.Value.ToLocalTime());
        dt = trigger.GetFireTimeAfter(dt);
    }
    

    如果您想将作业安排为每天下午5点运行一次,您可以更改代码,增加24小时的间隔:

    var trigger = TriggerBuilder.Create()
        .WithIdentity("DailyReportTrigger")
        .WithDailyTimeIntervalSchedule(s => s.OnEveryDay().StartingDailyAt(new TimeOfDay(timeOfExecution.Hours, timeOfExecution.Minutes)))
        .WithIntervalInHours(24)
        .Build();