0

我几乎用石英在 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,今天我想创建从 2013 年 8 月 8 日开始的 crone 触发器,并且每天从下午 2:00 到下午 3:00 每 10 分钟触发一次 SQL 查询。

目前我知道如何制作从 8.08.2013 开始并运行一次的 crone 触发器,并且知道如何创建第二个 crone 触发器,它每天从下午 2:00 到下午 3:00 每 10 分钟运行一次,但我仍然不知道如何marge 这 2 个 crone 触发器并创建一个:它从 8.08.2013 开始,在 8.08.2013 之后每天运行,并且每天从下午 2:00 到下午 3:00 每 10 分钟触发一次 SQL 查询。

我尝试使用:

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

但没有任何积极的结果。Job 就像它的 cronExpressionString 所说的那样触发。

非常感谢您的帮助。

4

3 回答 3

1

关键是在构建触发器时使用“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))
于 2016-05-19T00:57:07.177 回答
0

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

于 2013-08-01T20:22:23.710 回答
0

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

于 2013-08-06T16:18:37.530 回答