我在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