2014-09-17 3 views
5

내 응용 프로그램에서 Quartz 스케쥴러를 사용하고 있는데 나는 예외가 주어진 : Quartz 스케쥴러 - 트리거가 참조하지 않는 작업

내가 할 수없는 내 코드를 보면 ... 트리거가 주어진 작업을 참조하지 않습니다 문제가 어디에 있는지 알 것 같습니다.

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(); 

는 I에 유래에 이와 같은 글을 많이 발견 않았지만, 그들 각각에 내가 실수를 발견하거나 dev에 만든 것을 오타 수 있습니다. 여기에 나는 단서 막혔어.

어떤 생각?

+0

두 트리거 모두에 대해 동일한 예외가 발생합니까 아니면 하나만 다른 예외가 발생합니까? –

+0

한 번에 하나씩 시도해 보았습니다. (물론 두 가지 모두 시도해 보았습니다.) 두 가지 모두와 같이 실패했습니다. –

답변

8

알았어요!

문제가있는 그룹 때문입니다. 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")

을 삭제하거나 trigger.forJob 다른

+1

다른 사람들에게도 유용한 답변을 제공하는 몇 가지 설명을 추가하십시오. – jjj

0

사용에 jobDetail.withIdentity에 사용 된 것과 동일한 그룹 ("job01", "그룹 1")를 변경 ("job01 ","그룹 1 ")

트리거는 예를 들어, 작업이 사용하는 느릅 나무 그룹 통보해야합니다이 옆에

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); 

은 그것이 t를 사용한다고 생각합니다 그는 DEFAULT 그룹이며 작동하지 않을 것입니다.

+1

코드를 기반으로 예제를 포함하도록 답을 편집하는 것이 도움이 될 수 있습니다. . 제가 올바르게 이해한다면, 당신은 ".ForJob ("dailyJob ")"을 ".ForJob ("dailyJob, group1 ")"으로 대체하고 monthlyJob과 비슷한 것을해야한다고 말하고 있습니다. – Taegost

관련 문제