Einführung
In der Geschäftsverarbeitung verwenden einige Unternehmen asynchrone Methoden vernünftiger. In einer bestimmten Geschäftslogik werden beispielsweise einige Daten im Redis -Cache gespeichert. Der Cache ist nur eine Hilfsfunktion. Erfolg oder Misserfolg wirkt sich nicht grundlegend auf das Hauptgeschäft aus. Dieser Prozess kann durch eine asynchrone Methode durchgeführt werden.
Im Frühjahr kann die Methode asynchron aufgerufen werden, indem die @Async -Annotation auf der Methode festgelegt wird. Das heißt, die Methode kehrt sofort nach dem Aufruf zurück, und die tatsächliche Ausführung dieser Methode wird an den Taskexecutor von Spring übergeben, um sie zu vervollständigen.
Codebeispiel
Das Projekt ist ein normales Spring -Projekt, Frühlingskonfigurationsdatei:
<? xmlns: context = "http://www.springframework.org/schema/context" xmlns: task = "http://www.spingframework.org/schema/task" xsi: schemalocation = "http://wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.Stask.Sch. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/context/context/sping-context.org/schema/context/sping-context.org/schema/context/sping-contextextextextextextext.org/schema/context/Scontextextextextextextextextex http://www.springframework.org/schema/task http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd "> <!-; Basis-Package = "com.lzumetal.ssm"/> <!-Thread-Pool zur Ausführung asynchroner Aufgaben Taskexecutor-> <Task: Executor id = "myexecutor" Pool-Size = "5"/> <Aufgabe: Annotationsantriebs-Executor = "Myexecutor"/> </banes>
Zwei Serviceklassen:
Paket com.lzumetal.ssm.anotation.service; import org.slf4j.logger; import org.slf4j.loggerfactory; java.util.concurrent.future;/** * Business Service */@ServicePublic Class BusinessService {private statische endgültige Logger log = loggerfactory.getLogger (businessService.class); @Autowired Private Cacheservice Cacheservice; public void dobusiness () {log.Error ("Beginnen Sie, um mit unserem Geschäft umzugehen"); Cacheservice.cachedata (); log.Error ("COMLELE Service Operation"); } / *** den Rückgabewert für asynchrone Methodenausführung erhalten* / public void dobusinessWitHasyncReturn () löst ExecutionException aus, InterruptedException {log.Error ("Starten Sie mit unserem Geschäft um"); Future <String> future = cacheservice.cachedatawithreturn (); log.Error (future.get ()); //future.get () Methode ist eine blockierende log.Error ("COMLELE Service Operation"); }} Paket com.lzumetal.ssm.anotation.service; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.Scheduling.Annotation.async; org.springframework.stereotype.service; import Java.util.concurrent @ASync (value = "myexecutor") // Geben Sie den Taskexecutor an, um die Aufgabe public void cachedata () {try {timeUnit.seconds.sleep (3L) auszuführen; } catch (interruptedException e) {e.printstacktrace (); } log.Error ("Erfolg speichern das Ergebnis auf Cache"); } @ASync public Future <String> cachedatawithreturn () {try {TimeUnit.seconds.sleep (3L); } catch (interruptedException e) {e.printstacktrace (); } log.Error ("Erfolg speichern das Ergebnis auf Cache"); // Das zurückgegebene Ergebnis muss von der Asyncresult -Klasse zurückgepackt werden. }}Testklasse:
Paket com.lzumetal.ssm.anotation.test; import com.lzumetal.ssm.anotation.service.businessservice; import org.junit.test; import org.junit.runner org.springframework.test.context.contextConfiguration; import org.springframework.test.context.junit4.springjunit4ClassRunner; Import Java.util.Concurrent.TimeUnit; {"ClassPath: Spring-context.xml"}) public Class Achtung {@autowired Private BusinessService BusinessService; @Test public void test () löscht InterruptedException {BusinessService.dobusiness (); // Lassen Sie den Haupt -Thread nicht zu früh enden, andernfalls wird die Konsole den Ausgangsinhalt in der asynchronen Methode Timeunit.seconds.sleep (5L) nicht angezeigt. } @Test public void testaSyncReturn () löst eine Ausnahme aus {BusinessService.DobusinessWitHasyncReturn (); TimeUnit.Seconds.sleep (5L); }}Das Ergebnis der Ausführung der Test () -Methode:
22: 20: 33,207 Info Hauptunterstützung org.springFramework.test.context.support.dirtiescontextBeForemodestexecutionListener, org.springframework.test.context.support.dependencyInjaptionTestexecutionListener, org.springFramework.test.context.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support - org.springframework.test.context.transaction.transactionaltestexecutionListener, org.springframework.test.context.jdbc.sqlscriptstestexecutionListener]
22: 20: 33,226 Info Hauptunterstützung.DefaultTestContext: 209 - konnte testexecutionListener nicht instanziieren [org.springFramework.test.context.web.ServlettEstexecutionListener]. Geben Sie benutzerdefinierte Listener -Klassen an oder stellen Sie die Standard -Listener -Klassen (und deren erforderliche Abhängigkeiten) zur Verfügung. Beleidigung Klasse: [Javax/Servlet/ServletContext]
22: 20: 33,227 Info Hauptunterstützung.DefaultTestContextStoTStrapper: 187 - Verwenden von tstexecutionListenern: [org.springframework.test.context.support.dirtiesContextBeForemodestEtexecutionListener@100fc185, org.springframework.test.context.support.dependencyInjectionTeStexecutionListener@643b1d11, org.springframework.test.context.support.dirtiescontextTeTeTexecutionListener@2ef5e5e3, org.springframework.test.context.transaction.transactionalttetexecutionListener@36d4b5c, org.springframework.test.context.jdbc.sqlscriptstestexecutionListener@6d00a15d] 22: 20: 33: 33,324 Main xml.xmlBeanDefanDefandel Laden Sie XML-Bean-Definitionen aus der Klassenpfadressource [Spring-Context.xml]
22: 20: 33.585 Info Hauptunterstützung.genericApplicationContext: 583 - Aktualisieren org.springframework.context.support.genericApplicationContext@4f7d0008: Startup -Datum [Mi, 30.20:20:33 CST 2018]; Kontexthierarchie
22: 20: 33.763 Info Hauptverkehrszeit.
22: 20: 33.766 Info Hauptunterstützung. automatische Proxierung)
22: 20: 33.767 Info Hauptunterstützung automatische Proxierung)
22: 20: 34,107 Fehler Hauptdienst.Businessservice: 24 - Beginnen Sie mit unserem Geschäft umzugehen
22: 20: 34.113 Fehler Hauptdienst
22: 20: 37,166 Fehler Myexecutor -1 Service
22: 20: 39,117 Info Thread -0 Support Kontexthierarchie
22: 20: 39,118 Info Thread -0 gleichzeitlich
Das Ergebnis der Ausführung der Methode testaSyncReturn ():
21: 38: 16.908 Info Hauptunterstützung org.springFramework.test.context.support.dirtiescontextBeForemodestexecutionListener, org.springframework.test.context.support.dependencyInjaptionTestexecutionListener, org.springFramework.test.context.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support.Support - org.springframework.test.context.transaction.transactionaltestexecutionListener, org.springframework.test.context.jdbc.sqlscriptstestexecutionListener]
21: 38: 16.926 Info Hauptunterstützung.DefaultTestContextBootStrapper: 209 - konnte tstexexecutionListener nicht instanziieren [org.springframework.test.context.web.ServlettEstexecutionListener]. Geben Sie benutzerdefinierte Listener -Klassen an oder stellen Sie die Standard -Listener -Klassen (und deren erforderliche Abhängigkeiten) zur Verfügung. Beleidigung Klasse: [Javax/Servlet/ServletContext]
21: 38: 16.927 Info Hauptunterstützung.DefaultTestContextStootStrapper: 187 - Verwenden von tstexecutionListenern: [org.springframework.test.context.support.dirtiescontextBeForemodestEtexecutionListener@100fc185, org.springframework.test.context.support.dependencyInjectionTeStexecutionListener@643b1d11, org.springframework.test.context.support.dirtiescontextTeTeTexecutionListener@2ef5e5e3, org.springFramework.test.context.transaction.transactionaltstexecutionListener@36d4b5c, org.springFramework.test.context.jdbc.sqlscriptstestexecutionListener@6d00a15d] 21: 38: 17,025 Main axmlBeanDefanDefanDefanDefanDefanDefanDefanDefanDefandelition: 38: 17: 17,025 Main xml.xmlBeanDefandel Laden Sie XML-Bean-Definitionen aus der Klassenpfadressource [Spring-Context.xml]
21: 38: 17,263 Info Hauptunterstützung.genericApplicationContext: 583 - Aktualisieren org.springframework.context.support.genericApplicationContext@4f7d0008: Start -up -Datum [Mi, 30. Mai 21:38:17 CST 2018]; Kontexthierarchie
21: 38: 17.405 Info Hauptversammlung.
21: 38: 17.407 Info Hauptunterstützung. automatische Proxierung)
21: 38: 17.407 Info Hauptunterstützung. automatische Proxierung)
21: 38: 17.692 Fehler Hauptservice.Businessservice: 35 - Beginnen Sie mit unserem Geschäft umzugehen
21: 38: 20.833 Fehler Myexecutor -1 Service
21: 38: 20.834 Fehler Hauptdienst
21: 38: 20.835 Fehler Hauptdienst
21: 38: 25,838 Info Thread -0 Support Kontexthierarchie
21: 38: 25.839 Info Thread -0 gleichzeitlich
@Asyncs Nutzungspunkte
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.