使用Quartz.NET安排在特定时间每天运行的任务

时间:2013-06-25 05:11:05

标签: quartz-scheduler quartz.net

我使用Quartz.NET每天在特定时间执行任务,这是我的代码:

public class TestSchedule : ISchedule
    {
        public void Run()
        {

            DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second);

            IJobDetail job = JobBuilder.Create<HelloJob>()
                                       .WithIdentity("job1")
                                       .Build();

            ITrigger trigger = TriggerBuilder.Create()
                                             .WithIdentity("trigger1")
                                             .StartAt(startTime)
                                             .WithDailyTimeIntervalSchedule(x => x.OnEveryDay().StartingDailyAt(new TimeOfDay(7, 0)).WithRepeatCount(0))
                                             .Build();

            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sc = sf.GetScheduler();
            sc.ScheduleJob(job, trigger);

            sc.Start();
        }
    }

我的代码正在运行,但问题是只运行一次(似乎是因为WithRepeatCount(0)) 现在,怎么能说每天7点跑? PS:我不想使用CronTrigger来做到这一点。

1 个答案:

答案 0 :(得分:4)

DailyTimeIntervalTriggerImpl仅支持 repeatCount

  

此触发器还支持“repeatCount”功能以结束触发   达到一定数量的计数后的开火时间。就像   SimpleTrigger,设置repeatCount = 0表示触发器将触发一次   只要!设置任何正数,然后触发器将重复计数+   1次。与SimpleTrigger不同,是repeatCount的默认值   此触发器设置为REPEAT_INDEFINITELY而不是0。

Cron表达很漂亮,有tools的负载可以帮助你实现你想要的东西。

另一种选择是使用SimpleTriggerImpl并每24小时设置一次间隔:

ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger1")
        .StartAt(startTime)
        .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInHours(24))
        .Build();