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

问题描述 投票:0回答:5

我在应用程序中使用 Quartz Scheduler,但出现异常:触发器未引用给定作业...

查看我的代码,我似乎看不出问题出在哪里。

    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 上发现了很多类似这样的帖子,但在每一个帖子上我都可以发现开发人员犯的错误或拼写错误。在这里我只是一无所知..

有什么想法吗?

.net quartz-scheduler
5个回答
12
投票

好的找到了!

问题是由于群体造成的。可以在不指定组的情况下调用 WithIdentity 方法,只需使用名称即可。

所以就变成了:

IJobDetail dailyJob = JobBuilder.Create<PushElectricityPricesJob>()
    .WithIdentity("dailyJob")
    .Build();

ITrigger trigger1 = TriggerBuilder.Create()
   .WithIdentity("dailyJobTrigger")
   .StartNow()
   .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 0))
   .ForJob("dailyJob")
   .Build();

这似乎运作良好。 当然,您需要对其他工作做同样的事情。


0
投票

删除 .ForJob("dailyJob")

或更改为其他


0
投票

在trigger.forJob(“job01”,“group1”)上使用jobDetail.withIdentity(“job01”,“group1”)上使用的相同组

需要告知触发器您的作业正在使用哪个组,例如:

    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 组并且不起作用。


0
投票

该错误基本上意味着:

JobKey
中定义的
JobDetail
JobKey
中定义的
Trigger
不匹配。所以,让:

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

显然你也必须使两个组的名称相同;或删除两者


0
投票

您应该在 With Identity() 作业和触发器中添加组名称。
工作

 JobBuilder
.Create<BackupJob>()
.WithIdentity(todo.Name,"group1")
.WithDescription(todo.Name)
.Build();

触发

JobBuilder
.Create<BackupJob>()
.WithIdentity(todo.Name,"group1")
.WithDescription(todo.Name)
.Build();
© www.soinside.com 2019 - 2024. All rights reserved.