Maison  >  Article  >  Java  >  Comment gérer les tâches asynchrones et les tâches planifiées Springboot

Comment gérer les tâches asynchrones et les tâches planifiées Springboot

PHPz
PHPzavant
2023-05-25 20:05:121946parcourir

1 Avant-propos

Dans Springboot, les tâches asynchrones et les tâches planifiées sont des moyens couramment rencontrés pour gérer les problèmes. Afin de faire bon usage de ces deux configurations et de ne pas interférer avec les activités normales, elles doivent l'être. configuration asynchrone. Comment configurer un thread de traitement asynchrone raisonnable est le cœur et la clé. Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步化配置。怎么设置合理的异步处理线程就是其核心和关键。

2 异步任务设置

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

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

  • 1 开启 @EnableAsync 注解。

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

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

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

具体的代码如下所示:

Comment gérer les tâches asynchrones et les tâches planifiées Springboot

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

Comment gérer les tâches asynchrones et les tâches planifiées Springboot

3 定时任务配置

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

  • 1 全局开启 @EnableScheduling 注解。

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

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

Comment gérer les tâches asynchrones et les tâches planifiées Springboot

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

2 Paramètres des tâches asynchrones

Comment gérer les tâches asynchrones et les tâches planifiées SpringbootL'utilisation de tâches asynchrones dans les projets est un moyen fréquemment rencontré pour résoudre les problèmes. Il s'agit généralement de réduire le temps d'attente des demandes et d'effectuer un traitement en arrière-plan asynchrone du traitement métier, ce qui peut améliorer l'expérience utilisateur et augmenter la productivité. quantité de débit du système.

Ouvrir des tâches asynchrones dans springboot est également très simple Seules deux étapes sont requises :

  • 1 Ouvrez @. Annotation ActiverAsync. Comment gérer les tâches asynchrones et les tâches planifiées Springboot

  • 2 Ajoutez @Async à la méthode qui nécessite un traitement asynchrone. 🎜
🎜Il est à noter que les méthodes d'exécution asynchrones peuvent avoir des valeurs de retour, mais elles doivent être Future. Ceci est soumis de la même manière que le multithread. soumettre Tâche, comment obtenir les résultats du traitement. 🎜🎜À ce stade, la configuration et l'utilisation des tâches asynchrones sont terminées. Les tâches asynchrones utilisent également la technologie de pool de threads multithread. Par défaut, SimpleAsyncTaskExecutor est utilisé pour l'implémenter. Cependant, comment peut-on laisser son propre destin entre les mains des autres ? pratique. Qu'en est-il des tâches asynchrones ? Peut-il être implémenté à l'aide d'un pool de threads personnalisé ? C'est une bonne question, et il existe une réponse, à savoir AsyncConfigurer. Il s'agit d'une interface qui doit implémenter la méthode getAsyncExecutor pour obtenir un pool de threads. Si vous devez capturer des informations sur les exceptions, implémentez une méthode getAsyncUncaughtExceptionHandler. 🎜🎜🎜Le code spécifique est le suivant : 🎜🎜🎜Tâches et timing asynchrones Springboot Comment gérer la tâche🎜🎜🎜Les résultats de l'exécution de la tâche asynchrone sont les suivants, ce qui montre que la configuration du pool de threads de la tâche asynchrone a pris effet : 🎜🎜🎜Comment gérer les tâches asynchrones et les tâches planifiées de Springboot🎜🎜3 Configuration des tâches planifiées🎜🎜 Les tâches planifiées peuvent être considérées comme étant un problème très courant. La configuration utilisée dans le développement de projets, en compensation de l'existence des fonctions métier, occupe une telle position centrale. L'utilisation des tâches planifiées peut être divisée en expressions à temps fixe et crontab. Le propre @Schedule de code>spring est largement utilisé dans des projets uniques et ne nécessite pas l'aide d'autres plates-formes ni de configurations supplémentaires. C'est suffisant pour des tâches simples, mais pour des systèmes distribués. , c'est un peu insuffisant. , alors sont nés quartz, elastic-job et xxl-job, parmi lesquels xxl-job s'est particulièrement distingué. Ici, je vais seulement présenter l'utilisation de @Schedule : 🎜
  • 🎜1 Activer globalement l'annotation @EnableScheduling . 🎜
  • 🎜2 Ajoutez l'annotation @Schedule à la tâche qui doit être exécutée et spécifiez la méthode d'exécution, qu'il s'agisse d'une exécution fixe ou de l'utilisation de cron expression. 🎜
🎜Dans le développement actuel de projets, les expressions crontab sont encore largement utilisées : 🎜🎜Comment gérer les tâches asynchrones et les tâches planifiées Springboot🎜🎜Comme l'exécution de tâches asynchrones, l'exécution de tâches planifiées possède également son propre pool de threads de tâches asynchrones, ici L'interface qui doit être implémenté est SchedulingConfigurer, et sa méthode configureTasks peut être implémentée : 🎜🎜🎜🎜🎜🎜Une fois tous les fichiers de configuration terminés, vous pouvez voir les tâches planifiées après avoir exécuté The la configuration du pool de threads a pris effet : 🎜🎜🎜🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer