Springboot 异步任务和定时任务的异步处理
作者:??斜月???? 发布时间:2022-08-20 07:21:12
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 配置相关的内容,欢迎大家关注。
来源:https://juejin.cn/post/7086291900616933389


猜你喜欢
- OSS不支持通过一个网络地址来上传图片,所以若想将网络上的图片上传到OSS上需要走点弯路。1、通过链接将图片下载到本地的一个文件夹下面2、用
- 一、简介 1、地图 地图展示:普通地图(2D,3D)、卫星图和实时交通图。 地图操作:可通过接口或手势控制来实
- 本文实例讲述了C#实现生成所有不重复的组合功能。分享给大家供大家参考,具体如下:给你几个字母,比如(a,b,c,d,e,f),要求生成所有不
- 在开发中,用到springboot项目,当打包后部署运行时,出现了这个问题,网上搜了好多,又是加META-INF配置,又是加啥的,感觉spr
- 一、错误处理原理分析使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状
- 实现形式elevationMaterial Design提供了View的阴影效果设置。主要由两个属性决定:elevation和transla
- 本文实例为大家分享了java swing实现简单计算器界面的具体代码,供大家参考,具体内容如下已经学习了一部分的swing知识,现在综合运用
- 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为是Andriod内置的控件,google一把,发现是个githu
- 本文实例讲述了C#读取csv格式文件的方法。分享给大家供大家参考。具体实现方法如下:一、CSV文件规则 1 开头是不留空,以行为单
- static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法。供大家参考借鉴。具
- Bean三种自定义初始化和销毁一. 三种方法概述在配置类中指定 @Bean(initMethod = “init&
- 咱们废话不多说进入主题、系统主页展示:用户登录后进行系统首页:主要功能模块如下、分角色管理、超级管理员拥有最高权限、可以进行菜单灵活控制、用
- 本文为大家分享了JSplitPane的使用方法,供大家参考,具体内容如下1、swing分割窗口控件JSplitPane,用来将窗口分割成两个
- Android 想判断 Activity 是否是全屏,网上找了些方法,看到有直接获取 flags 和一个具体的值比较,并没有用,其实分析下来
- 每天上下楼都是乘坐电梯的,就想电梯的工作原理是什么呢?于是自己写了个控制台程序来模拟一下电梯的工作原理!采用面向对象的编程思想!将电梯拆解为
- 前言:1.最近项目上在测试人员压测过程中发现了OOM问题,项目使用springboot搭建项目工程,通过查看日志中包含信息:unable t
- 突然学到了,所以就放到博客上来共享一下,权当是学习日记吧。首先说明一下,数组是引用类型的,所以注意不要在复制时复制了地址而没有复制数值哦!其
- 在基于UI元素的自动化测试中, 无论是桌面的UI自动化测试,还是Web的UI自动化测试. 首先我们需要查找和识别UI
- Spring Security OAuth2主要配置,注意application.yml最后的配置resource filter顺序配置,不
- 目录一,功能二,工具三、效果图:四、数据库设计五、JAVA层次分析六、主要Java代码分析一,功能管理员登录图书借阅信息管理图书信息管理管理