Quartz Scheduler - 触发器不引用给定的作业

时间:2014-09-17 16:13:44

标签: .net quartz-scheduler

我在我的应用程序中使用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上发现了很多像这样的帖子,但是在每一个帖子上我都可以发现开发者所犯的错误或拼写错误。在这里,我只是无能为力......

有什么想法吗?

4 个答案:

答案 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中定义的JobDetailJobKey中定义的Trigger不匹配。因此,制作:

JobBuilder.withIdentity(JobKey.jobKey("ABC")) 
TriggerBuilder.withIdentity(JobKey.jobKey("ABC")) 

很显然,您还必须使两个组名相同。或全部删除