石英中的延迟cron触发(不同的第一个开始日期)

时间:2013-08-01 13:29:33

标签: c# nhibernate quartz-scheduler quartz.net

我几乎完成了使用quartz的c#中的简单应用程序,它定期运行一些SQL查询。

我有一个问题,是否可以创建在特定日期开始工作的cron触发器,并在此日期之后定期执行一些工作。

这是我的代码:

                    IJobDetails myJob = new JobDetails(); //This Constructor needs to be parameterless i nic na to nie poradzimy
                    JobDetailImpl jobDetail = new JobDetailImpl(name, gruoupName, myJob.GetType());
                    //dodawanie parametru
                    jobDetail.JobDataMap.Add("addParam", item);
                    //////
                    CronTriggerImpl trigger = new CronTriggerImpl();
                    trigger.Name = triggerName;
                    trigger.Group = grupa;
                    trigger.CronExpressionString = "0 10 14-15 8 8 ?";

                    try
                    {
                        _scheduler.ScheduleJob(jobDetail, trigger);
                    }
                    catch
                    {
                        MessageBox.Show("INVALID TRIGGER. JOB CANCELED");
                    }
                    DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc().Value.AddHours(2);

                    Console.WriteLine("Job o jobs_id=" + item.jobs_id + " start:" +     nextFireTime.Value);

例如: 今天是1.08.2013,今天我想创建crone触发器,从8.08.2013开始,每隔10分钟从下午2点到下午3点每天触发SQL查询。

此刻我知道如何制作启动8.08.2013并运行一次的crone触发器,并且知道如何创建第二个crone触发器,每天从下午2:00到下午3:00每隔10分钟运行一次,但我仍然无法想象如何制作这2个crone触发器并创建一个:从8.08.2013开始,每天在8.08.2013之后运行,并且每隔10分钟从下午2:00到下午3:00每天触发SQL查询。

我尝试过使用:

      trigger.FinalFireTimeUtc(someDate);
      trigger.SetNextFireTimeUtc(someDate)

但没有任何积极的结果。如cronExpressionString所说,作业会触发。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

关键是在构建Trigger时使用' StartAt'扩展方法。

/* calculate the next time you want your job to run - in this case top of the next hour */
var hourFromNow = DateTime.UtcNow.AddHours(1);
var topOfNextHour = new DateTime(hourFromNow.Year, hourFromNow.Month, hourFromNow.Day, hourFromNow.Hour, 0, 0);

/* build your trigger and call 'StartAt' */
TriggerBuilder.Create().WithIdentity("Delayed Job").WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever()).StartAt(new DateTimeOffset(topOfNextHour))

答案 1 :(得分:0)

不确定您使用的是哪个版本的Quartz.net,但是可以使用2.0设置“StartTimeUtc”属性。你可能想试试那个。

答案 2 :(得分:0)

谢谢lenimall的回答。我检查方法StatTimeUTC,但它返回start datetime值,而不是设置它。我找到了一个博客,其中profz Quartz在你想要的时候无法运行作业。 http://nurkiewicz.blogspot.com/2012/04/quartz-scheduler-misfire-instructions.html 无论如何,非常感谢你的帮助!