2014-09-17 13 views
5

Sto utilizzando il Quartz Scheduler nella mia applicazione e ottengo l'eccezione: trigger non fa riferimento il lavoro dato ...Quarzo Scheduler - grilletto non fa riferimento determinato lavoro

Guardando il mio codice non posso sembra di vedere dove potrebbe essere il problema.

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

mi ha trovato un sacco di messaggi come questo su StackOverflow, ma su ciascuno di loro ho potuto individuare l'errore o errore di battitura che il dev ha fatto. Qui sono solo confuso ...

Qualche idea?

+0

Stai ottenendo la stessa eccezione per entrambi i trigger o solo uno o l'altro? –

+0

Ho provato uno alla volta (ho provato entrambi ovviamente) e fallisce tanto quanto con –

risposta

8

Ok, ho trovato!

Il problema era a causa dei gruppi. Il metodo WithIdentity può essere chiamato senza specificare il gruppo, solo con il nome.

Così diventa:

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

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

E che sembra funzionare bene. Ovviamente devi fare lo stesso per l'altro lavoro.

0

eliminare .ForJob ("dailyJob")

o passare a altri

+1

per favore aggiungi qualche spiegazione per rendere la risposta utile anche ad altri – jjj

0

Utilizzare lo stesso gruppo usato su jobDetail.withIdentity ("job01", "Gruppo 1") sul trigger.forJob ("job01 ", 'gruppo 1')

The trigger ha bisogno di essere informato gruppo Quale il vostro lavoro sta usando, per esempio:

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

Oltre a questo si penserà che il suo utilizzo t lui gruppo DEFAULT e non funzionerà.

+1

Potrebbe essere utile modificare la tua risposta per includere esempi basati sul codice . Se ho capito bene, quello che stai dicendo è che dovrebbero sostituire ".ForJob (" dailyJob ")" con ".ForJob (" dailyJob, group1 ")" e fare qualcosa di simile per il MonthlyJob? – Taegost

Problemi correlati