Frühjahr ScheduledTask - start/stop-Unterstützung?
Gibt es eine Möglichkeit zum starten oder stoppen von tasks mithilfe Frühjahr Geplante Tasks initialisiert mithilfe von Kontext-Datei oder die @Scheduled annotation?
Möchte ich die Aufgabe starten, wenn erforderlich, und stoppen Sie, wenn die Aufgabe nicht mehr erforderlich ist, ausgeführt werden.
Wenn dies nicht möglich ist, eine alternative zu injizieren Frühjahr Variablen für einen thread?
- Sie können herausfinden, wie zu stop starten Sie, und list geplante Aufgaben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anhalten registriert @Geplante Bohnen ist kein standard-feature, da der Zugang zu Ihnen ist private in die
org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor
.Wenn Sie brauchen, um zu verwalten die Zeit, die Sie ausführen, müssen Sie diese registrieren programmgesteuert (
TriggerTask
): finden Sie in der Dokumentation zuorg.springframework.scheduling.annotation.SchedulingConfigurer
. In der Artorg.springframework.scheduling.config.TriggerTask
es ist die Methode, die Renditen Art vonorg.springframework.scheduling.Trigger
. Dort können Sie verwalten neben der Ausführung.TriggerTask
s sein könnte, Bohnen im Fall der programmatischen Registrierung.Hier ist ein Beispiel für das starten/stoppen einer geplanten Methode in den Frühling Starten. Sie können solche APIs:
http:localhost:8080/start - für den Start geplante Methode mit fester rate 5000 ms
http:localhost:8080/stop - zum stoppen der geplanten Methode
Haben die
@Scheduled
Methode suchen für eine variable gehaltenApplication
Staat oderServletContext
oder von einem Wert, gespeichert in der DB. Wenn der Wert TRUE ist, fahren Sie mit der Aufgabe; wenn FALSE, nicht zu starten. Dieses setup wird die Kontrolle der geplanten Ausführung.Wenn Sie wollen auch in der Lage sein, um das Feuer die Aufgabe wird, verweisen Sie die Aufgabe, die Methode aus einem Controller; auf diese Weise können Sie Feuer auf werden. Zusätzlich, wenn die länger Laufenden task, erstellen Sie eine zweite Methode, kommentierte
@Async
und rufen Sie die Methode aus dem Controller, so dass es läuft in einem eigenen thread.