Ich versuche einen Thread zu erstellen, der eine Reihe von Aufgaben ausführt und, wenn er nicht innerhalb einer bestimmten Zeit (z. B. 100 Sekunden) beendet wird, eine Ausnahme auslöst. Derzeit versuche ich dies zu tun, indem ich die Aufgaben in ein runnable
-Objekt kapsle und ExecutorService
und Future
-Klassen verwende, um die Timeout-Ausführungen durchzuführen. Wenn ich jedoch meinen Webservice starte, bekomme ich diese Ausnahme:
Ich habe online gelesen, dass es nicht so einfach ist, eigene Threads zu definieren und sie zu starten, um einen Thread für Spring zu starten, also frage ich mich, wie ich das machen soll? Was vermisse ich?
Sie können stattdessen mehrere @async-Methoden verwenden und diese dann aus Ihrem Haupt-Code-Flow ausführen, um eine Liste von Futures zu erhalten. Nach Ablauf der Zeitüberschreitung können Sie das Ergebnis erhalten oder die Ausführung stoppen (Abbrechen / Beenden).
Dies hat Vorteile, da Sie federverwaltete Beans aufrufen werden. Somit stehen Ihnen alle Eigenschaften für die Abhängigkeitsinjektion zur Verfügung. Aber Sie sollten auf die Menge der Jobs / Themen achten, die Sie einreichen.
Um @async-Annotationen zu verwenden, müssen Sie Async-Elemente aktivieren, indem Sie entweder eine bestimmte Zeile in Ihrer XML-Konfiguration oder eine AsyncEnabled-Annotation auf Ihrer Bean verwenden.
Tags und Links java multithreading spring spring-mvc