2013-10-02 15 views
6

Qualcosa su cui non sono chiaro. Supponiamo che i lavori siano programmati casualmente durante il giorno e che ogni lavoro impieghi 30 minuti per essere eseguito. Diciamo che ho cinque di questi lavori in esecuzione e Tomcat viene ucciso. I lavori vengono riavviati quando avvio Tomcat con la mia applicazione o i lavori attualmente in esecuzione vengono persi perché sono già stati attivati?Quartz attualmente in esecuzione quando Tomcat viene ucciso

risposta

11

Risposta breve, per impostazione predefinita, lavori attualmente in esecuzione sono considerati licenziato e non vengono recuperati

.. ma è possibile impostare requestRecovery proprietà quando si crea un lavoro (JobDetail) per dire al quarzo di recuperare quel esecuzione di lavori in caso di arresto anomalo, ad esempio "arresto anomalo".

Citando la documentazione ufficiale here nella parte inferiore della pagina:

RequestsRecovery - se un lavoro "richieste di recupero", ed è l'esecuzione durante il tempo di un 'arresto duro' del scheduler (vale a dire il processo in cui è in esecuzione all'interno di arresti anomali, o la macchina è spenta), quindi viene rieseguita quando lo scheduler viene avviato di nuovo. In questo caso, il metodoJobExecutionContext.isRecovering() restituirà true.

Così si può fare per exemple:

import static org.quartz.JobBuilder.*; 

... 

JobDetail job = newJob(MyJob.class) 
      .withIdentity("myJob", "group1") 
      .requestRecovery(true) //This is the guy! 
      .build(); 

... 
0

Tomcat non si cura del tuo lavoro. È tuo compito terminare correttamente il lavoro nella tua webapp quando viene spento.

+0

quello che sono dopo è non quarzo riprovare i posti di lavoro che sono stati in corso di esecuzione o non quarzo buttarli via, nel senso di quarzo non può in modo pulito recuperare da un blocco della JVM dove un utente non ha mezzi per "terminare correttamente il lavoro" – user671731

Problemi correlati