Ho un'applicazione che utilizza Quartz Scheduler per pianificare i lavori. L'applicazione è attualmente in esecuzione Quartz versione 1.6.2. My JobStore è org.quartz.impl.jdbcjobstore.JobStoreTX con un database Oracle che lo supporta. Il clustering è attivo, ma esiste un solo scheduler che utilizza il database. Il mio threadpool Quartz è configurato come segue:Posso far accendere i lavori di Quartz nell'ordine in cui sono stati attivati?
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
I miei lavori sono lunghi in esecuzione, quindi è abbastanza comune avere 5 lavori in esecuzione (il massimo consentito dalla mia piscina thead) quando trigger fuoco nuovi posti di lavoro. I nuovi posti di lavoro innescati cilecca e vedo registrare i messaggi come il seguente:
2011-05-20 04:09:30,097 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:29 05/20/2011
2011-05-20 04:09:30,120 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:09:30,125 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:30 05/20/2011
2011-05-20 04:09:30,138 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:11:29,998 INFO [QuartzScheduler_scheduler-servername-111305822376676_MisfireHandler] o.q.impl.jdbcjobstore.JobStoreTX - Handling 2 trigger(s) that missed their scheduled fire-time.
Una volta che un processo in esecuzione termina, uno dei lavori cilecca sarà ottenere raccolti e funzionare normalmente. Tuttavia, Quartz sembra raccogliere un lavoro a caso in modo casuale, senza riguardo all'ordine in cui i lavori erano stati originariamente pianificati per l'esecuzione. Idealmente, mi piacerebbe che venissero raccolti nell'ordine in cui avrebbero dovuto correre, in base ai loro tempi di fuoco originali.
È possibile attivare i processi di attesa (non elaborati) nell'ordine in cui sono stati attivati dopo che lo spazio nel Quartz ThreadPool è diventato disponibile?
Non riesco davvero a testarlo perché ho un nuovo lavoro, non ho usato il quarzo da anni e non posso essere preso la briga di creare un progetto di test solo per vedere se funziona. Tuttavia, sono impressionato dal fatto che ti sei preso la briga di rispondere a una domanda di 5 anni e la tua risposta sembra utile, quindi vado avanti e segna questo come risolto :) –
Avevo un problema simile, quindi la ricerca stack overflow. Alla fine ho scavato nel codice e ho capito da solo ma ho pensato di lasciarlo qui nel caso in cui qualcun altro stesse cercando la risposta in futuro. – samblake
@JonQuarfoth Cosa ha funzionato per te alla fine? Sto pianificando decine di migliaia di lavori e il lavoro sarà lungo poiché ho bisogno di migrare blob da un luogo all'altro e questi blob possono arrivare a 100 GB. Sto pianificando di usare il clustering del quarzo in modo che quando il master pianifica il lavoro, gli schiavi continueranno a lavorare su quei lavori e non mi interessa davvero il miss fire poiché mi interessa solo che il lavoro venga scelto da uno degli schiavi alla fine . Forse posso impostare un valore soglia di svarione ridicolmente grande. Per favore fatemi sapere cosa ne pensate voi ragazzi. Grazie. – Coder