2013-10-02 4 views
6

Etwas, ich bin nicht klar auf. Angenommen, ich habe im Laufe des Tages Jobs nach dem Zufallsprinzip geplant, und jeder Job dauert 30 Minuten. Sagen wir, ich habe fünf dieser Jobs am Laufen und Tomcat wird getötet. Starten die Jobs neu, wenn ich Tomcat mit meiner Anwendung starte, oder gehen die laufenden Jobs verloren, weil sie bereits abgefeuert haben?Quarz aktuelle Ausführung Job, wenn Tomcat getötet wird

Antwort

11

Kurze Antwort, standardmäßig sind aktuell laufenden Jobs gefeuert betrachtet und werden nicht wiederhergestellt

.. aber Sie requestRecovery Eigenschaft einstellen können, wenn Sie einen Job (JobDetail) bauen Quarz zu sagen, sich zu erholen, dass Ausführen von Jobs im Falle eines Absturzes aka "hard shutdown".

Zitiert die offizielle Dokumentation here am unteren Rand der Seite:

RequestsRecovery - wenn ein Job „fordert recovery“, und es wird während der Zeit eines ‚harte Abschaltung‘ des Vollstreckungs Scheduler (dh der Prozess läuft im Absturz, oder die Maschine ist ausgeschaltet), dann wird es erneut ausgeführt, wenn der Scheduler erneut gestartet wird. In diesem Fall gibt die Methode JobExecutionContext.isRecovering() true zurück.

So können Sie für exemple tun:

import static org.quartz.JobBuilder.*; 

... 

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

... 
0

Tomcat kümmert sich nicht um Ihre Arbeit. Es ist Ihre Aufgabe, den Job in Ihrer Webanwendung beim Beenden ordnungsgemäß zu beenden.

+0

was ich bin nachdem es nicht Quartz die Aufträge erneut versuchen, die zur Zeit wurden die Ausführung oder nicht Quarz sie wegzuwerfen, Quarz Sinn kann nicht sauber von einem Jvm Absturz erholen wo ein Benutzer keine Möglichkeit hat, "den Job korrekt zu beenden" – user671731

Verwandte Themen