Erstellen eines Threads zum Ausführen von Tasks mit einem Timeout auf einem Spring-Webserver

8

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:

%Vor%

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?

    
Evil Washing Machine 13.04.2016, 14:42
quelle

2 Antworten

3

Versuchen Sie Folgendes:

%Vor%     
Ahmad 18.04.2016 09:07
quelle
1

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.

    
zubrabubra 24.04.2016 17:21
quelle