石英延迟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所说,作业会被解雇。
非常感谢您的帮助。
关键是在构建触发器时使用"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无论如何,非常感谢您的帮助!