データベースから開始時刻や発効日などのジョブの詳細を取得しています。ジョブの詳細に基づいてジョブを作成していますが、新しいジョブの別のエントリを取得したり、スケジュールされたジョブの開始時刻が変更されたりした場合はどうなりますか? 、したがって、ジョブスケジューラに新しいジョブが追加される方法、またはスケジューラで新しい開始時間が変更される方法。
私はC#.netを使用しています。
データベースから開始時刻や発効日などのジョブの詳細を取得しています。ジョブの詳細に基づいてジョブを作成していますが、新しいジョブの別のエントリを取得したり、スケジュールされたジョブの開始時刻が変更されたりした場合はどうなりますか? 、したがって、ジョブスケジューラに新しいジョブが追加される方法、またはスケジューラで新しい開始時間が変更される方法。
私はC#.netを使用しています。
以前のバージョンの Quartz で既存のトリガーを更新できなかったかどうかはわかりませんが、新しいバージョン (2.* の時点) でトリガーを更新することは可能です。
更新は次のように行うことができます (Quartz.net に適合)。
// retrieve the trigger
Trigger oldTrigger = sched.GetTrigger(new TriggerKey("oldTrigger", "group1"));
// obtain a builder that would produce the trigger
TriggerBuilder tb = oldTrigger.GetTriggerBuilder();
// update the schedule associated with the builder, and build the new trigger
// (other builder methods could be called, to change the trigger in any desired way)
Trigger newTrigger = tb.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).WithRepeatCount(10))
.Build();
sched.RescheduleJob(oldTrigger, newTrigger);
新しいトリガーを使用してジョブをスケジュールする必要があります。トリガーは、作成後に更新することはできません。
トリガーを削除して、新しいトリガーを作成できます。ここですでに答えたように。
Quarzt 1.0.3 を使用してトリガーの使用を削除する
Scheduler.UnscheduleJob(triggerName, groupName);
たとえば、新しいものを作成するには
CronTrigger trigger = new CronTrigger(string.Format(TRIGGER_NAME_FORMAT, jobName), TRIGGER_DEFAULT_GROUP, jobName, groupName, utcDate, null, cronExpression, TimeZoneInfo.Utc);
Scheduler.ScheduleJob(job, trigger);
チェックしなかった他のオプションは、トリガーが CronTrigger として定義されている場合に cron 式を更新することです
しかし、私はそれを確認したことがないので、うまくいくかどうかはわかりません。
foreach (Trigger trigger in Scheduler.GetTriggersOfJob(jobName, group))
{
if (trigger is CronTrigger)
{
CronTrigger cronTrigger = trigger as CronTrigger;
if (cronTrigger != null)
{
cronTrigger.CronExpressionString = "Your Updated Cron Strin";
}
}
}