Springboot 异步任务和定时任务的异步处理

 更新时间:2022年05月05日 09:26:07   作者:​ 斜月   ​  
本文介绍了Springboot异步任务和定时任务的异步处理,Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步化配置。怎么设置合理的异步处理线程就是其核心和关键,下文详情需要的朋友可以参考下

1 前言

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

2 异步任务设置

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

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

  • 1 开启 @EnableAsync 注解。
  • 2 在需要异步处理的方法上添加 @Async

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

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

具体的代码如下所示:

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

3 定时任务配置

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

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

在实际的项目开发中,crontab 表达式应用还是很广泛的,这里给一下 cron 表达式生成地址,以供参考:

https://www.bejson.com/othertools/cron

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

在一切配置文件做好后,运行后可以看出定时任务的线程池配置已经生效:

4 总结

文中讲述了异步任务处理的配置和定时任务的异步化配置,在后续的文章中将继续分享 springboot 配置相关的内容,欢迎大家关注。

到此这篇关于Springboot 异步任务和定时任务的异步处理的文章就介绍到这了,更多相关Springboot异步处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Spring Bean的配置方式与实例化

    详解Spring Bean的配置方式与实例化

    本文主要带大家一起学习一下Spring Bean的配置方式与实例化,文中的示例代码讲解详细,对我们学习Spring有一定的帮助,需要的可以参考一下
    2022-06-06
  • 基于jdk1.8的Java源码详解 Integer

    基于jdk1.8的Java源码详解 Integer

    这篇文章主要介绍了基于jdk1.8的Java源码详解 Integer,Integer是int的Warpper类,是面向对象的即OOP的对象类型,,需要的朋友可以参考下
    2019-06-06
  • Java HTTP协议收发MQ 消息代码实例详解

    Java HTTP协议收发MQ 消息代码实例详解

    这篇文章主要通过实例代码为大家详细介绍了如何在Java 环境下使用 HTTP 协议收发 MQ 消息,需要的朋友可以参考下
    2017-04-04
  • Java 如何使用@Autowired注解自动注入bean

    Java 如何使用@Autowired注解自动注入bean

    这篇文章主要介绍了Java 使用@Autowired注解自动注入bean的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java基础-Java变量的声明和作用域

    Java基础-Java变量的声明和作用域

    这篇文章主要介绍了Java变量的声明和作用域,变量其实就是内存中的一个存储空间,用来存储数据,具体的相关内容,需要的小伙伴可以参考下面文章内容
    2022-01-01
  • mybatis新增save结束后自动返回主键id详解

    mybatis新增save结束后自动返回主键id详解

    这篇文章主要介绍了mybatis新增save结束后自动返回主键id详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Springboot项目如何使用apollo配置中心

    Springboot项目如何使用apollo配置中心

    这篇文章主要介绍了Springboot项目如何使用apollo配置中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot集成WebSocket实现后台向前端推送信息的示例

    SpringBoot集成WebSocket实现后台向前端推送信息的示例

    这篇文章主要介绍了SpringBoot集成WebSocket实现后台向前端推送信息的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • mybatis自定义类型处理器TypehHandler示例详解

    mybatis自定义类型处理器TypehHandler示例详解

    我们在写mapper映射器的配置文件时,不经意间已经用到类型转换,不过是mybatis帮我们完成的,下面这篇文章主要给大家介绍了关于mybatis自定义类型处理器TypehHandler的相关资料,需要的朋友可以参考下
    2018-09-09
  • Java 单例模式详细解释

    Java 单例模式详细解释

    这篇文章主要给大家介绍了关于Java中四种单例模式的相关资料,其中包括饿汉式、懒汉式、懒汉式(双重锁)及内部类等四种,分别给出了详细的示例代码和介绍,需要的朋友们下面来一起看看吧。
    2021-11-11

最新评论