1
public static void ConfigureJob()
{
    int ScheduleTriggerDate = Convert.ToInt32(ConfigurationManager.AppSettings["ScheduleTriggerDate"]);

    ISchedulerFactory sf = new StdSchedulerFactory();
    IScheduler sched = sf.GetScheduler();


    IJobDetail job = JobBuilder.Create<MailingList>().WithIdentity("job1", "group1").Build();

    ITrigger trigger = TriggerBuilder.Create()
        .WithDailyTimeIntervalSchedule
        (s =>
            s.WithIntervalInHours(24)
                .OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 0))
        )
        .Build();

    sched.ScheduleJob(job, trigger);
    sched.Start();
}

我正在尝试在 Windows 服务中安排 Quartz.Net CronTrigger。我有上面的示例代码,我想要实现的是将作业安排在每天的特定时间运行。在测试中我发现上面的代码不可靠,有时它运行,有时它只是默默地失败,

我在这里阅读了一些帖子,建议使用 CronTrigger 而不是上面示例中的简单触发器。

有谁知道我如何使用 CronTrigger 实现上述要求?或者如何改进上述示例,使其每天在我可以在 app.config 文件中设置的特定时间可靠地运行?

4

1 回答 1

1

用于CronScheduleBuilder使其易于配置CronTrigger

// Extension method to round a date to a given part
var nextFire = DateTime.Now.Truncate(TimeSpan.FromHours(1));
var trigger = TriggerBuilder.Create()
           .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(nextFire.Hour, nextFire.Minute).WithMisfireHandlingInstructionFireAndProceed())
           .Build();

如果您更喜欢直接指定 cron 表达式(如您提到的,来自 app.config 文件):

// Runs every day at 9am in this example.
.WithSchedule(CronScheduleBuilder.CronSchedule("0 0 9 1/1 * ? *"))

您可以使用这个站点来计算 cron 表达式

于 2014-03-20T17:26:03.047 回答