如何从数据库动态重新安排C#中的Quartz作业调度程序?我在我的C#.Net网站中包含了Quartz.net库,以根据特定条件自动发送电子邮件。我已经使用RepeatForever()完成了这项工作。我从数据库中获取调度程序的设置。现在当作业已经开始时,无论如何都要检查调度程序的设置是否在数据库中发生了变化,所以我是否也应该在我的方法中更新它们以便调度程序使用新设置动态运行?到目前为止,我已经这样做了:publicvoidStartJob(){varreminderSettings=GetReminderSettings();//从数据库中获取这些设置varcount=GetUnpaidInvoicesListCount();varintervalBtwnReminders=0;如果(reminderSettings?.RemindersGap!=null){intervalBtwnReminders=(int)(reminderSettings.RemindersGap);}ISchedulerFactoryschedFact=newStdSchedulerFactory();ISchedulersched=schedFact.GetScheduler();计划开始();//创建作业IJobDetailjob=JobBuilder.Create().WithIdentity("job1","group1").Build();//创建触发器ITriggertrigger=TriggerBuilder.Create().WithIdentity("trigger1","group1").WithSimpleSchedule(x=>{x.WithIntervalInMinutes(intervalBtwnReminders).RepeatForever();}).Build();sched.ScheduleJob(作业,触发器);我写了一组方法让它更容易。您无法使用新间隔编辑现有触发器,但可以用新触发器替换现有触发器。CreateTrigger方法基于旧触发器创建新触发器并传输TimesTriggered计数。//////基于现有触发器创建新触发器。//////现有触发器///指示触发器是否应在调度后立即启动///新触发器的间隔///返回新触发器publicITriggerCreateTrigger(ITriggeroldTrigger,boolstartNow=false,TimeSpan?interval=null){varbuilder=oldTrigger.GetTriggerBuilder();如果(startNow)builder=builder.StartNow();如果(interval.HasValue)builder=builder.WithSimpleSchedule(s=>s.WithInterval(interval.Value).RepeatForever());varnewTrigger=builder.Build();varsimpleTrigger=newTriggerasISimpleTrigger;if(simpleTrigger!=null){vartrigger=oldTriggerasISimpleTrigger;如果(触发器!=null)simpleTrigger.TimesTriggered=trigger.TimesTriggered;}返回新触发器;}如何使用它在这个例子中,调度器已经运行。以上是C#学习教程:HowtodynamicallyrescheduletheQuartzjobschedulerinC#fromthedatabase?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——//获取触发器vartrigger=Scheduler.GetTrigger(newTriggerKey("trigger1","组1"));//获取设置并设置间隔varreminderSettings=GetReminderSettings();varintervalBtwnReminders=0;如果(reminderSettings?.RemindersGap!=null){intervalBtwnReminders=(int)(reminderSettings.RemindersGap);}//使用新触发器重新安排作业并立即启动它。//如果您不希望它现在开始,请为“startNow”参数传递“false”本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
