【发布时间】:2017-07-14 09:19:40
【问题描述】:
我在 Windows 服务中使用 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 有足够的方法来更改和重新安排您的作业和触发器。使用它而不是重新启动调度程序。也无需将作业/触发器信息保存在单独的表中。 Quartz 可以与您的数据库交互以保存所有作业的状态。
标签: c# quartz.net