我在我的应用程序中使用Quartz Scheduler并得到异常:Trigger没有引用给定的作业...
查看我的代码,我似乎无法看到问题所在。
var schedFact = new StdSchedulerFactory();
scheduler = schedFact.GetScheduler();
IJobDetail dailyJob = JobBuilder.Create<PushElectricityPricesJob>()
.WithIdentity("dailyJob", "group1")
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("dailyJobTrigger", "group1")
.StartNow()
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 0))
.ForJob("dailyJob")
.Build();
scheduler.ScheduleJob(dailyJob, trigger1);
IJobDetail monthlyJob = JobBuilder.Create<PushContributionsJob>()
.WithIdentity("monthlyJob", "group2")
.Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity("monthlyJobTrigger", "group2")
.StartNow()
.WithSchedule(CronScheduleBuilder.MonthlyOnDayAndHourAndMinute(1, 0, 0))
.ForJob("monthlyJob")
.Build();
scheduler.ScheduleJob(monthlyJob, trigger2);
scheduler.Start();
我确实在StackOverflow上发现了很多像这样的帖子,但是在每一个帖子上我都可以发现开发者所犯的错误或拼写错误。在这里,我只是无能为力......
有什么想法吗?
答案 0 :(得分:9)
好的发现了!
问题是因为这些团体。可以在不指定组的情况下调用WithIdentity方法,只需使用名称。
所以它变成了:
IJobDetail dailyJob = JobBuilder.Create<PushElectricityPricesJob>()
.WithIdentity("dailyJob")
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("dailyJobTrigger")
.StartNow()
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 0))
.ForJob("dailyJob")
.Build();
这似乎工作正常。 当然,你需要为其他工作做同样的事情。
答案 1 :(得分:0)
删除 .ForJob( “dailyJob”)
或更改为其他
答案 2 :(得分:0)
在trigger.forJob上使用jobDetail.withIdentity(&#34; job01&#34;,&#34; group1&#34;)上使用的相同组(&#34; job01&#34;,&#34; group1& #34)
触发器需要通知您的工作正在使用的组,例如:
var schedFact = new StdSchedulerFactory();
scheduler = schedFact.GetScheduler();
IJobDetail dailyJob = JobBuilder.Create<PushElectricityPricesJob>()
.WithIdentity("dailyJob", "group1")
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("dailyJobTrigger", "group1")
.StartNow()
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 0))
.ForJob("dailyJob", "group1")
.Build();
scheduler.ScheduleJob(dailyJob, trigger1);
除此之外,它会认为它使用DEFAULT组并且不起作用。
答案 3 :(得分:0)
该错误基本上意味着:JobKey
中定义的JobDetail
与JobKey
中定义的Trigger
不匹配。因此,制作:
JobBuilder.withIdentity(JobKey.jobKey("ABC"))
TriggerBuilder.withIdentity(JobKey.jobKey("ABC"))
很显然,您还必须使两个组名相同。或全部删除