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
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.
HINWEIS: Dies ist für den Frühling 3.0+
Verwenden Sie einen
TaskScheduler
Service, wie zum Beispiel einTimerManagerTaskScheduler
oderThreadPoolTaskScheduler
.Zeitplan Ihre Aufgabe durch einige
TaskScheduler.schedule*()
Methode und speichern Sie die RückkehrScheduledFuture
aufrufen. Wenn Sie die Ausführung abbrechen möchten, rufen SieScheduledFuture.cancel()
auf. Das wird weitere Aufrufe Ihrer Aufgabe stoppen. Zu diesem Zeitpunkt können Sie den Zeitplan ändern, indem Sie für Ihre AufgabeTaskScheduler.schedule*()
mit anderen Parametern aufrufen.
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
Instanziieren Sie den TaskScheduler mit einem '
Vorgeschlagene Lösungsimplementierung: https://stackoverflow.com/questions/39152599/ –
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.
'
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