Ich habe eine Frage zu Spring @Async
Annotation und wie man sie richtig benutzt. Sagen wir, ich habe diese Methoden:
Muss ich @Async
für alle drei Methoden haben, damit es asynchron aufgerufen wird oder ist es genug, um es nur auf test3
zu haben, was die Arbeit tatsächlich erledigt?
Sie brauchen es nur bei einer Methode. Nur weil ein neuer Thread mit der ersten @Async
-Methode gestartet wird, ist as asynchron zur aufrufenden Methode.
Aber was das für Sie bedeutet, hängt stark davon ab, was Ihr Beispiel veranschaulichen soll:
1) In Ihrem Fall ist also @Async
für test1(String param1)
genug, wenn Sie test2
und test3
bis test1
aufrufen.
Beachten Sie, dass die Methoden 2 und 3 privat sind
2) Aber wenn Ihr Beispiel eine Methode darstellt, die Muster für Standardparameter überlädt ( Methodenverkettung ), dann ist es komplizierter. Dann müssten Sie die Annotation @Async
bei der Methode haben, die das echte Zeug macht. Weil Sie die reale Ausführung nur asynchron ausführen möchten, aber nicht einen asynchronen Aufruf für jeden Verkettungsschritt.
Beachten Sie, dass alle Methoden nur mit test
(Methodenverkettungsmuster) benannt sind
Das Problem dabei ist, dass Spring (ohne echtes AspectJ load- oder kompilierbares Weben) keine Methode async ausführt, wenn sie über this
! aufgerufen wird! (siehe Ссылка )
Ich denke @Ralph hat Ihre Bedenken gedeckt.
Da der Name der Frage jedoch lautet: "Wie verwende ich @ Async richtig im Frühling", muss ich Folgendes erwähnen:
Sie sollten den Standardtask-Executor im Spring-Kontext immer ändern (oder zumindest daran denken, ihn zu ändern) oder einen benutzerdefinierten Task-Executor verwenden.
>Standardmäßig wird ein SimpleAsyncTaskExecutor zur Verarbeitung von Async verwendet Methodenaufrufe.
HINWEIS: Diese Implementierung verwendet keine Threads! Ziehen Sie stattdessen eine Thread-Pooling-TaskExecutor-Implementierung in Betracht, insbesondere für Ausführen einer großen Anzahl von kurzlebigen Aufgaben.
Tags und Links java spring asynchronous spring-mvc spring-boot