Windowsサービス内でQuartz.netを使用して、自分のデータベース内に存在するジョブをスケジュールしています。Quartz.Netのすべてのジョブとスケジュールを定期的に再ロードするにはどうしたらいいですか?
私のユーザーは、CRON式を変更できるこの表のフロントエンドを持っています。現在のところ、私のアプリケーションにはCRON式を変更するロジックやサービスの再起動なしにジョブを追加/削除するロジックがありません(ジョブのリロードがトリガーされるため)。 以下のコードを使用して、データベースからすべてのジョブをロードしています。
protected void LoadJobs()
{
logger.Info("Loading jobs.");
var jobs = middlewareRepository.GeActiveJobs();
foreach (var job in jobs)
{
IJobDetail jobDetail = JobBuilder.Create<JobDespatcher>()
.WithIdentity(job.Description)
.UsingJobData("JobId", job.Id)
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithCronSchedule(job.CronExpression)
.Build();
scheduler.ScheduleJob(jobDetail, trigger);
logger.InfoFormat("Job with id {0} ({1}) has been scheduled.", job.Id, job.Description);
}
}
スケジューラキューをクリアしてジョブをリロードする方法はありますか。 Quartz.Netにはこれを行うための関数が組み込まれていますか? または、すべてのジョブ/スケジュールをアンロードして再ロードするロジックを構築する必要がありますか? 現在実行中のジョブを削除すると、そのジョブは停止するのか、続行されますか?
これを実装する最良の方法についてのアドバイスは素晴らしいことです。
クォーツには、ジョブとトリガを変更して再スケジュールするのに十分な方法があります。これを使用して、スケジューラを再起動します。ジョブ/トリガー情報を別のテーブルに保持する必要もありません。 Quartzはデータベースと対話して、すべてのジョブの状態を保存できます。 – Rabban