石英延迟crone触发器(不同的首次启动日期)

本文关键字:启动 日期 crone 延迟 触发器 石英 | 更新日期: 2023-09-27 18:25:45

我几乎已经用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);

例如:今天是2013年8月1日,今天我想创建一个crone触发器,它从2013年8日8点开始,每天从下午2点到下午3点,每10分钟触发一次SQL查询。

目前,我知道如何创建从2013年8月8日开始运行一次的crone触发器,也知道如何创建第二个crone触发器(每天从下午2点到3点每10分钟运行一次),但我仍然不知道如何将这两个crone触发标记为marge并创建一个:从2013年08月8日起,从2013年10月8日后每天运行,每天从下午两点到3点每隔10分钟触发SQL查询。

我尝试过使用:

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

但没有任何积极的结果。正如cronExpressionString所说,作业会被解雇。

非常感谢您的帮助。

石英延迟crone触发器(不同的首次启动日期)

关键是在构建触发器时使用"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))

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

感谢lenimall的回答。我检查了方法StatTimeUTC,但它返回开始日期时间值,而不是设置它。我发现了一个博客,该博客的教授Quartz无法在你想要的时间运行作业。http://nurkiewicz.blogspot.com/2012/04/quartz-scheduler-misfire-instructions.html无论如何,非常感谢您的帮助!