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文件中设置的特定时间每天可靠地运行?
答案 0 :(得分: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 * ? *"))