2012-12-13 5 views
7

Ich muss die Spring-Timer-Ausführung abbrechen oder die Ausführungshäufigkeit basierend auf einigen Bedingungen ändern. Benutzte sowohl org.springframework.scheduling.quartz.SimpleTriggerBean als auch org.springframework.scheduling.timer.ScheduledTimerTask. Kann den Weg nicht finden, wie es geht.So brechen Sie die Spring-Timer-Ausführung ab

Antwort

0

Dies ist bei weitem nicht die beste Lösung, aber wenn Sie nichts anderes finden können, könnten Sie immer einen booleschen Wert verwenden, der jedes Mal überprüft wird, wenn das Ereignis ausgelöst wird und wenn der boolesche Wert false ist Timertask sollte sofort beendet werden.

+0

Das habe ich tatsächlich gemacht. Dieser Ansatz ist definitiv nicht vorzuziehen, da ich die Aufgabe nicht erneut ausführen möchte, wenn eine Bedingung erfüllt ist. – BigWonder

14

HINWEIS: Dies ist für den Frühling 3.0+

  1. lesen Spring documentation on scheduling tasks

  2. Verwenden Sie einen TaskScheduler Service, wie zum Beispiel ein TimerManagerTaskScheduler oder ThreadPoolTaskScheduler.

  3. Zeitplan Ihre Aufgabe durch einige TaskScheduler.schedule*() Methode und speichern Sie die Rückkehr ScheduledFuture aufrufen. Wenn Sie die Ausführung abbrechen möchten, rufen Sie ScheduledFuture.cancel() auf. Das wird weitere Aufrufe Ihrer Aufgabe stoppen. Zu diesem Zeitpunkt können Sie den Zeitplan ändern, indem Sie für Ihre Aufgabe TaskScheduler.schedule*() mit anderen Parametern aufrufen.

+0

Meine Beans werden in der Quell-XML-Datei bereitgestellt. Wie bekomme ich von dort eine Instanz des TaskSchedulers? Willst du sagen, dass ich alles in meinem Java-Code bereitstellen muss? – BigWonder

+0

Instanziieren Sie den TaskScheduler mit einem '' Element und injizieren Sie es dort, wo Sie es verwenden möchten. – gpeche

+0

Vorgeschlagene Lösungsimplementierung: https://stackoverflow.com/questions/39152599/ –

0

Die Lösung ist eine ID zum org.springframework.scheduling.timer.TimerFactoryBean zuzuweisen und dann diese abzurufen bean aus der Anwendung, werfen sie Timer und rufen Methode für das Objekt gelöscht werden.

+0

' ' Dann können Sie myScheduler und' cancel() 'bekommen. – Andre