Wenn quarz mehrere Threads bearbeitet, führt quartz einen Job nur in einem Thread aus

8

Ich habe mich gefragt, ob man Quarz so konfigurieren kann, dass ein langer Verarbeitungsjob ausgeführt wird, der nur zu einem bestimmten Zeitpunkt in einem Thread ausgeführt wird. Mit anderen Worten, ich habe Quarz mit einem SimpleThreadPool der Größe 5 konfiguriert. Und ich habe einen Auftrag, der alle 10 Sekunden ausgelöst wird, aber in bestimmten Situationen länger als 10 Sekunden dauern kann. Gibt es eine Möglichkeit, Quarz-Trigger / Job / Scheduler so zu konfigurieren, dass dieser Trigger nicht erneut ausgelöst wird, da er bereits in einem anderen Thread ausgeführt wird. Wenn der Trigger erneut ausgelöst wird, wird ein anderer Thread aus dem Pool ihn aufheben und zwei Instanzen des gleichen Jobs zur gleichen Zeit ausführen. Danke für Ihre Eingabe.

Klarstellung: (für die Vorschläge zur Verwendung eines Threadpools der Größe 1). Die Anforderung besteht darin, den Threadpool mit 5 Threads zu konfigurieren und einen einzelnen Job zu einem bestimmten Zeitpunkt nur in einem einzelnen Thread ausführen zu lassen, dh eine Instanz eines Jobs sollte nur von einem Thread ausgeführt werden.

    
John 02.08.2011, 21:00
quelle

2 Antworten

21

Wenn Sie Quartz 1.x verwenden, implementieren Sie die Job-Klasse StatefulJob . Wenn Sie Quartz 2.x verwenden, fügen Sie der Jobklasse die Annotation @DisallowConcurrentExecution hinzu.

    
jhouse 05.08.2011, 17:50
quelle
1

setzen

%Vor%

Es wird jeweils einen Quarz-Arbeiter-Thread geben

    
blob 04.08.2011 06:53
quelle

Tags und Links