0

Ich möchte einige Tasks asynchron in einer Webanwendung ausführen. Meine Frage ist, welche Spring-Implementierung von Task-Executoren ich in einer Container-verwalteten Umgebung verwenden sollte.Asynchrone Taskausführung mit Spring in einer Container-verwalteten Umgebung

Ich habe auf this Kapitel im Frühjahr Dokumentation verwiesen und fand einige Optionen. Eine Option, die ich in Betracht gezogen habe, ist WorkManagerTaskExecutor. Dies ist sehr einfach und funktioniert nahtlos mit dem IBM Websepher-Server, den ich derzeit verwende, aber dies ist sehr spezifisch für IBM Websphere- und Oracle Weblogic-Server. Ich möchte meinen Code nicht spezifisch an eine bestimmte Implementierung binden, da in einigen Test- und lokalen Regionen der Jetty-Container & diese Implementierung Probleme beim Ausführen des Codes in Jetty verursacht.

Andere Optionen wie SimpleThreadPoolTaskExecutor scheint nicht am besten geeignet sein, Thread-Pooling in Container-verwalteten Umgebung zu nutzen, und ich möchte selbst keinen neuen Thread erstellen.

Könnten Sie bitte vorschlagen, wie ich darüber gehe. Irgendwelche Hinweise auf eine Beispielimplementierung werden große Hilfe sein.

Antwort

0

Wie üblich hängt es davon ab. Wenn Sie sich auf die Thread-Verwaltung des Containers verlassen und in der Lage sein möchten, Thread-Pools auf seiner Admin-Oberfläche zu setzen oder wenn Ihre Anwendung nicht die einzige App im Container ist, oder bestimmte Funktionen wie das Festlegen von Thread-Pool-Prioritäten für EJB oder JMS verwenden sollte Unterstützung für den WorkManagerTaskExecutor hinzufügen und konfigurierbar machen. Wenn nicht, können Sie verwenden, was Sie wollen, weil die Endthreads nur Threads sind. Seit Frühjahr ist ein IOC-Container können Sie es tun. Um die gleiche App überall zu verwenden, würde ich nicht vorschlagen, die XML-Konfiguration pro App-Version zu ändern. Vielmehr

  1. Verwendung profiles mit configuration den Executor Typen einzustellen und in Ihrem Java-Config den richtigen Bean-Typ zurück. Wenn Sie Jetty verwenden, sollten Sie eine Konfiguration für die Thread-Pool-Größen haben, um diese abstimmen zu können.

  2. Verwenden Sie spring boot like auto configuration, die normalerweise auf verfügbare Klassen im Klassenpfad (@ConditionalOnClass) angewiesen sind. Wenn Ihr WebLogic oder Websphere bestimmte Klassen verfügbar oder andere Behälter bestimmte Sache wie env Variablen können Sie die WorkManagerTaskExecutor

Mit diesen beiden erstellen Sie denselben Krieg überall einsetzen können.