1
public static void ConfigureJob()
{
    int ScheduleTriggerDate = Convert.ToInt32(ConfigurationManager.AppSettings["ScheduleTriggerDate"]);

    ISchedulerFactory sf = new StdSchedulerFactory();
    IScheduler sched = sf.GetScheduler();


    IJobDetail job = JobBuilder.Create<MailingList>().WithIdentity("job1", "group1").Build();

    ITrigger trigger = TriggerBuilder.Create()
        .WithDailyTimeIntervalSchedule
        (s =>
            s.WithIntervalInHours(24)
                .OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 0))
        )
        .Build();

    sched.ScheduleJob(job, trigger);
    sched.Start();
}

Windows サービスで Quartz.Net CronTrigger をスケジュールしようとしています。上記のサンプル コードがあり、達成しようとしているのは、ジョブを毎日特定の時間に実行するようにスケジュールすることです。テストでは、上記のコードが信頼できないことがわかりました。実行される場合もあれば、静かに失敗する場合もあります。

上記のサンプルの単純なトリガーの代わりに CronTrigger を使用することを提案するいくつかの投稿をここで読みました。

CronTriggerを使用して上記の要件を達成する方法を知っている人はいますか? または、上記のサンプルを改善して、app.config ファイルで設定できる特定の時間に毎日確実に実行するにはどうすればよいですか?

4

1 に答える 1

1

CronScheduleBuilder構成を簡単にするために使用しますCronTrigger

// Extension method to round a date to a given part
var nextFire = DateTime.Now.Truncate(TimeSpan.FromHours(1));
var trigger = TriggerBuilder.Create()
           .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(nextFire.Hour, nextFire.Minute).WithMisfireHandlingInstructionFireAndProceed())
           .Build();

cron 式を直接指定する場合 (前述のように、app.config ファイルから):

// Runs every day at 9am in this example.
.WithSchedule(CronScheduleBuilder.CronSchedule("0 0 9 1/1 * ? *"))

このサイトを使用して、cron 式を計算できます。

于 2014-03-20T17:26:03.047 に答える