我几乎完成了使用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所说,作业会触发。
非常感谢您的帮助。
答案 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 无论如何,非常感谢你的帮助!