Heim >Java >javaLernprogramm >Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben
In Springboot
sind asynchrone Aufgaben und geplante Aufgaben häufig anzutreffende Möglichkeiten, um mit Problemen umzugehen. Um diese beiden Konfigurationen sinnvoll zu nutzen und das normale Geschäft nicht zu beeinträchtigen, müssen sie vorhanden sein asynchrone Konfiguration. Das Einrichten eines angemessenen asynchronen Verarbeitungsthreads ist der Kern und der Schlüssel. Springboot
中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步化配置。怎么设置合理的异步处理线程就是其核心和关键。
在项目中使用异步任务是经常遇到的解决问题方式,通常是为减少请求的等待时间,将业务处理进行异步后台处理,可以改善用户的体验,增加系统的吞吐量。
在 springboot
中开启异步任务,也是十分的简单,只需要两步操作:
1 开启 @EnableAsync
注解。
2 在需要异步处理的方法上添加 @Async
。
需要说明的是异步执行的方法可以有返回值,但是必须是 Future
,这里和多线程 submit
的方式提交任务,获取处理结果的方式。
到此为止,异步任务的配置和使用就结束了。异步任务使用的也是多线程线程池技术,默认情况下采用的是 SimpleAsyncTaskExecutor
来实现,但是自己的命运怎么能交到他人手上呢,总觉得不太踏实,异步任务怎么才能使用自定义的线程池去实现呢,这是一个好问题,答案也是有的,那就是 AsyncConfigurer
。这是一个接口,需要实现 getAsyncExecutor
方法来获取一个线程池,如果需要异常信息的抓取,则在实现一个方法 getAsyncUncaughtExceptionHandler
即可。
具体的代码如下所示:
异步任务执行结果如下,可以说明异步任务的线程池配置已经生效:
定时任务在项目开发中可以说是很常用的配置,作为业务功能的补偿而存在,有这举足轻重的地位,对于定时任务的使用,可以分为固定时间和 crontab
表达式,在实现的工具上,有 spring
自带的 @Schedule
,在单体项目中应用广泛,不需要借助其它的平台和额外的配置,对于简单的任务来说已经足够,但是对于分布式系统来说,就有点儿力不从心了,这时就诞生了 quartz、 elastic-job 和 xxl-job
等,其中 xxl-job
尤为出色。在这里,只介绍一下 @Schedule
的使用:
1 全局开启 @EnableScheduling
注解。
2 在需要执行的任务上添加 @Schedule
注解,并指定执行方法,是固定执行还是采用 cron
表达式。
在实际的项目开发中,crontab
表达式应用还是很广泛的:
和异步任务执行一样,定时任务的执行也是有自己的异步任务线程池,这里需要实现的接口为 SchedulingConfigurer
,实现其 configureTasks
Die Verwendung asynchroner Aufgaben in Projekten ist eine häufig anzutreffende Möglichkeit, Probleme zu lösen. Um die Wartezeit von Anfragen zu verkürzen, kann die asynchrone Hintergrundverarbeitung der Geschäftsverarbeitung normalerweise die Benutzererfahrung verbessern und den Durchsatz erhöhen das System.
Das Öffnen asynchroner Aufgaben in springboot
ist ebenfalls sehr einfach. Es sind nur zwei Schritte erforderlich:
1 Öffnen Sie @. EnableAsync
-Annotation.
@Async
zur Methode hinzu, die eine asynchrone Verarbeitung erfordert. 🎜Future
sein müssen. Dies wird auf die gleiche Weise wie Multithread- übermittelt einreichen
Aufgabe, wie man die Ergebnisse der Verarbeitung erhält. 🎜🎜An diesem Punkt ist die Konfiguration und Verwendung asynchroner Aufgaben abgeschlossen. Asynchrone Aufgaben verwenden auch die Multithread-Thread-Pool-Technologie. Standardmäßig wird SimpleAsyncTaskExecutor
verwendet. Wie kann das eigene Schicksal jedoch in den Händen anderer liegen? Praktisch. Was ist mit asynchronen Aufgaben? Kann es mit einem benutzerdefinierten Thread-Pool implementiert werden, und es gibt eine Antwort: AsyncConfigurer
. Dies ist eine Schnittstelle. Sie müssen die Methode getAsyncExecutor
implementieren, um einen Thread-Pool zu erhalten. Wenn Sie Ausnahmeinformationen erfassen müssen, können Sie eine Methode getAsyncUncaughtExceptionHandler
implementieren. 🎜🎜🎜Der spezifische Code lautet wie folgt: 🎜🎜🎜🎜🎜🎜Die Ergebnisse der asynchronen Aufgabenausführung lauten wie folgt, was zeigt, dass die Thread-Pool-Konfiguration der asynchronen Aufgabe wirksam geworden ist: 🎜🎜🎜🎜🎜3 Geplante Aufgabenkonfiguration🎜🎜 Geplante Aufgaben können als sehr häufig bezeichnet werden Die in der Projektentwicklung verwendete Konfiguration als Kompensation für die Existenz von Geschäftsfunktionen kann in feste Zeit- und crontab
-Ausdrücke unterteilt werden Code>springs eigenes @Schedule wird häufig in Einzelprojekten verwendet und erfordert keine Hilfe anderer Plattformen und zusätzlicher Konfigurationen. Es reicht für einfache Aufgaben aus, ist jedoch für verteilte Systeme ausreichend , es ist etwas unzureichend, dann wurden quartz, elastic-job
geboren, unter denen xxl-job
besonders herausragte. Hier werde ich nur die Verwendung von @Schedule
vorstellen: 🎜@EnableScheduling
global . 🎜@Schedule
hinzu und geben Sie die Ausführungsmethode an, ob es sich um eine feste Ausführung oder um die Verwendung von cron
handelt > Ausdruck. 🎜crontab
-Ausdrücke immer noch häufig verwendet: 🎜🎜🎜🎜Wie die asynchrone Aufgabenausführung verfügt auch die geplante Aufgabenausführung hier über einen eigenen asynchronen Aufgaben-Thread-Pool Die Schnittstelle, die benötigt wird implementiert werden soll, ist SchedulingConfigurer
, und seine Methode configureTasks
kann implementiert werden: 🎜🎜🎜🎜🎜🎜Nachdem alle Konfigurationsdateien abgeschlossen sind, können Sie die geplanten Aufgaben nach dem Ausführen von The sehen Die Thread-Pool-Konfiguration ist wirksam geworden: 🎜🎜🎜🎜🎜Das obige ist der detaillierte Inhalt vonUmgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!