Heim  >  Artikel  >  Java  >  Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben

Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben

PHPz
PHPznach vorne
2023-05-25 20:05:121967Durchsuche

1 Vorwort

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 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步化配置。怎么设置合理的异步处理线程就是其核心和关键。

2 异步任务设置

在项目中使用异步任务是经常遇到的解决问题方式,通常是为减少请求的等待时间,将业务处理进行异步后台处理,可以改善用户的体验,增加系统的吞吐量。

在 springboot 中开启异步任务,也是十分的简单,只需要两步操作:

  • 1 开启 @EnableAsync 注解。

  • 2 在需要异步处理的方法上添加 @Async

需要说明的是异步执行的方法可以有返回值,但是必须是 Future,这里和多线程 submit 的方式提交任务,获取处理结果的方式。

到此为止,异步任务的配置和使用就结束了。异步任务使用的也是多线程线程池技术,默认情况下采用的是 SimpleAsyncTaskExecutor 来实现,但是自己的命运怎么能交到他人手上呢,总觉得不太踏实,异步任务怎么才能使用自定义的线程池去实现呢,这是一个好问题,答案也是有的,那就是 AsyncConfigurer。这是一个接口,需要实现 getAsyncExecutor 方法来获取一个线程池,如果需要异常信息的抓取,则在实现一个方法 getAsyncUncaughtExceptionHandler 即可。

具体的代码如下所示:

Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben

异步任务执行结果如下,可以说明异步任务的线程池配置已经生效:

Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben

3 定时任务配置

定时任务在项目开发中可以说是很常用的配置,作为业务功能的补偿而存在,有这举足轻重的地位,对于定时任务的使用,可以分为固定时间和 crontab 表达式,在实现的工具上,有 spring 自带的 @Schedule,在单体项目中应用广泛,不需要借助其它的平台和额外的配置,对于简单的任务来说已经足够,但是对于分布式系统来说,就有点儿力不从心了,这时就诞生了 quartz、 elastic-job 和 xxl-job 等,其中 xxl-job 尤为出色。在这里,只介绍一下 @Schedule 的使用:

  • 1 全局开启 @EnableScheduling 注解。

  • 2 在需要执行的任务上添加 @Schedule 注解,并指定执行方法,是固定执行还是采用 cron 表达式。

在实际的项目开发中,crontab 表达式应用还是很广泛的:

Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben

和异步任务执行一样,定时任务的执行也是有自己的异步任务线程池,这里需要实现的接口为 SchedulingConfigurer ,实现其 configureTasks

2 Asynchrone Aufgabeneinstellungen

Umgang mit asynchronen Springboot-Aufgaben und geplanten AufgabenDie 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. Umgang mit asynchronen Springboot-Aufgaben und geplanten Aufgaben

  • 2 Fügen Sie @Async zur Methode hinzu, die eine asynchrone Verarbeitung erfordert. 🎜
🎜Es ist zu beachten, dass asynchrone Ausführungsmethoden Rückgabewerte haben können, diese jedoch 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: 🎜🎜🎜Asynchrone Aufgaben und Timing von Springboot So handhaben Sie die Aufgabe🎜🎜🎜Die Ergebnisse der asynchronen Aufgabenausführung lauten wie folgt, was zeigt, dass die Thread-Pool-Konfiguration der asynchronen Aufgabe wirksam geworden ist: 🎜🎜🎜So handhaben Sie asynchrone Springboot-Aufgaben und geplante Aufgaben🎜🎜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: 🎜
  • 🎜1 Aktivieren Sie die Annotation @EnableScheduling global . 🎜
  • 🎜2 Fügen Sie der Aufgabe, die ausgeführt werden muss, die Annotation @Schedule hinzu und geben Sie die Ausführungsmethode an, ob es sich um eine feste Ausführung oder um die Verwendung von cronhandelt > Ausdruck. 🎜
🎜In der tatsächlichen Projektentwicklung werden crontab-Ausdrücke immer noch häufig verwendet: 🎜🎜So handhaben Sie asynchrone und geplante Springboot-Aufgaben🎜🎜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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen