在Quartz.Net中计划多个作业
我是Quartz.Net的初学者。 如何在计划程序中添加多个作业在Quartz.Net中计划多个作业,.net,quartz.net,.net,Quartz.net,我是Quartz.Net的初学者。 如何在计划程序中添加多个作业 为了便于学习,我正在使用控制台应用程序。您想要完成的事情非常简单: isSchedulerFactory schFactory=new StdSchedulerFactory(); isScheduler sch=schFactory.GetScheduler(); sch.Start(); //重复下面的代码,找到你想要的工作 //为他们创造就业机会和触发因素。 //如果它们同时开火,只需要一个点火器。。。。。 IJobDeta
为了便于学习,我正在使用控制台应用程序。您想要完成的事情非常简单:
isSchedulerFactory schFactory=new StdSchedulerFactory();
isScheduler sch=schFactory.GetScheduler();
sch.Start();
//重复下面的代码,找到你想要的工作
//为他们创造就业机会和触发因素。
//如果它们同时开火,只需要一个点火器。。。。。
IJobDetail job=JobBuilder.Create()
.WithIdentity(“我的工作”,null)
.Build();
ITrigger触发器=触发器生成器
.Create()
.WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever())
.ForJob(job)
.WithIdentity(job.Key.Name+“触发器”)
.Build();
sch.AddJob(触发器);
如果您是Quartz.Net新手,我建议您从Jay Villata和旧版开始,在那里您可以找到大量关于Quartz.Net的教程和有用的信息
如果要在控制台应用程序中调度多个作业,只需调用调度程序.ScheduleJob
(isScheduler)传递作业和先前创建的触发器即可:
IJobDetail firstJob = JobBuilder.Create<FirstJob>()
.WithIdentity("firstJob")
.Build();
ITrigger firstTrigger = TriggerBuilder.Create()
.WithIdentity("firstTrigger")
.StartNow()
.WithCronSchedule("0 * 8-22 * * ?")
.Build();
IJobDetail secondJob = JobBuilder.Create<SecondJob>()
.WithIdentity("secondJob")
.Build();
ITrigger secondTrigger = TriggerBuilder.Create()
.WithIdentity("secondTrigger")
.StartNow()
.WithCronSchedule("0 0/2 * 1/1 * ? *")
.Build();
Scheduler.ScheduleJob(firstJob, firstTrigger);
Scheduler.ScheduleJob(secondJob, secondTrigger);
我使用这个解决方案:
IJobDetail jobDetail = JobBuilder
.Create<ReportJob>()
.WithIdentity("theJob")
.Build();
ITrigger everydayTrigger = TriggerBuilder
.Create()
.WithIdentity("everydayTrigger")
// fires
.WithCronSchedule("0 0 12 1/1 * ?")
// start immediately
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
.Build();
ITrigger yearlyTrigger = TriggerBuilder.Create()
.WithIdentity("yearlyTrigger")
// fires
.WithCronSchedule("0 0 12 1 1 ? *")
// start immediately
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
.Build();
var dictionary = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
dictionary.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger>()
{
everydayTrigger,
yearlyTrigger
});
sched.ScheduleJobs(dictionary, true);
ijobdail jobdail=作业生成器
.Create()
.具有身份(“工作”)
.Build();
ITrigger everydayTrigger=TriggerBuilder
.Create()
.WithIdentity(“everydayTrigger”)
//开火
.WithCronSchedule(“0 0 12 1/1*?”)
//立即开始
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second,DateTime.Now.Day,DateTime.Now.Month,DateTime.Now.Year))
.Build();
ITrigger yearlyTrigger=TriggerBuilder.Create()
.WithIdentity(“yearlyTrigger”)
//开火
.WithCronSchedule(“0 0 12 1*”)
//立即开始
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second,DateTime.Now.Day,DateTime.Now.Month,DateTime.Now.Year))
.Build();
var dictionary=newdictionary();
dictionary.Add(jobDetail,newquartz.Collection.HashSet())
{
每一天,
按年触发
});
ScheduleJobs(字典,true);
from:它不起作用。第二个作业出现异常,因为“触发器不引用给定的作业”。你能告诉我另一件事吗。假设有两个作业以相同的间隔运行。那么我可以暂停任何一项工作一段时间,然后再让它运行吗?很高兴我帮了忙。我已经用更多信息更新了我的答案。看看
PauseJob
和ResumeJob
。干杯。谢谢你的快速反应。但是上面的代码不能满足我的要求。我有一个场景,假设两个作业以相似的间隔运行,时间为30秒。然后假设一个作业由于某种原因在15秒时突然暂停,而另一个作业继续运行。现在我希望在恢复后,第一个作业应该在16秒开始,即它离开的位置。失火会有帮助吗?这个“0*8-22**”和“0/2*1/1*?*”的意思是什么@Mou:这是一个问题。您可以检查该表达式的结果。
IJobDetail jobDetail = JobBuilder
.Create<ReportJob>()
.WithIdentity("theJob")
.Build();
ITrigger everydayTrigger = TriggerBuilder
.Create()
.WithIdentity("everydayTrigger")
// fires
.WithCronSchedule("0 0 12 1/1 * ?")
// start immediately
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
.Build();
ITrigger yearlyTrigger = TriggerBuilder.Create()
.WithIdentity("yearlyTrigger")
// fires
.WithCronSchedule("0 0 12 1 1 ? *")
// start immediately
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
.Build();
var dictionary = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
dictionary.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger>()
{
everydayTrigger,
yearlyTrigger
});
sched.ScheduleJobs(dictionary, true);