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

目录
  • 1 前言
  • 2 异步任务设置
  • 3 定时任务配置
  • 4 总结

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异步处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Springboot中的异步、定时、邮件任务

    目录 一.异步任务 1.编写一个类AsyncService 2.编写一个AsyncController类 3.开启异步 二.邮件任务 1.引入依赖 2.配置mail 3.测试 三.定时任务 1.编写一个ScheduledService类 2.添加注解 一.异步任务 1.编写一个类AsyncService 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务. package com

  • springboot中swagger、异步/定时/邮件任务的问题

    目录 1.SpringBoot:集成Swagger终极版 1.1.Swagger简介 1.2.SpringBoot集成Swagger 1.3.配置Swagger 1.4.配置扫描接口 1.5.配置Swagger开关 1.6.配置API分组 1.7.实体配置 1.8.常用注解 1.9.拓展:其他皮肤 2.SpringBoot:异步.定时.邮件任务 2.1.异步任务 2.2.邮件任务 2.3.定时任务 1.SpringBoot:集成Swagger终极版 学习目标: 了解Swagger的概念及作用 掌

  • SpringBoot实现定时任务和异步调用

    本文实例为大家分享了SpringBoot实现定时任务和异步调用的具体代码,供大家参考,具体内容如下 环境: jdk1.8:spring boot2.0.2:Maven3.3 摘要说明: 定时任务:定时任务是业务场景中经常出现的一种情况如:定时发送邮件,短信.定时统计监控数据.定时对账等 异步调用:一个都买流程可能包括下单.发货通知.短信推送.消息推送等,其实除了下单这个主要程序是主程序,其他子程序可以同时进行且不影响主程序的运行,这个时候就可以使用异步调用来调用这些子程序: 步骤: 1.定时任务

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

    目录 1 前言 2 异步任务设置 3 定时任务配置 4 总结 1 前言 在 Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步化配置.怎么设置合理的异步处理线程就是其核心和关键. 2 异步任务设置 在项目中使用异步任务是经常遇到的解决问题方式,通常是为减少请求的等待时间,将业务处理进行异步后台处理,可以改善用户的体验,增加系统的吞吐量. 在 springboot 中开启异步任务,也是十分的简单,只需要两步操作: 1 开

  • Django配置celery(非djcelery)执行异步任务和定时任务

    所有演示均基于Django2.0 celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 消息队列broker:broker实际上就是一个MQ队列服务,可以使用redis.rabbitmq等作为broker 处理任务的消费者workers:broker通知worker队列中有任务,worker去队列中取出任务执行,每一个worker就是一个进程 存储结果的bac

  • SpringBoot 实现动态添加定时任务功能

    目录 代码结构 1.配置类 2.定时任务类型枚举 3.实际执行任务实现类 4.定时任务包装器 5.任务注册器(核心) 6.使用 最后 最近的需求有一个自动发布的功能, 需要做到每次提交都要动态的添加一个定时任务 代码结构 1. 配置类 package com.orion.ops.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conf

  • Springboot通过Scheduled实现定时任务代码

    定时任务一般会存在中大型企业级项目中,为了减少服务器.数据库的压力往往会采用时间段性的去完成某些业务逻辑.比较常见的就是金融服务系统推送回调,一般支付系统订单在没有收到成功的回调返回内容时会持续性的回调,这种回调一般都是定时任务来完成的.还有就是报表的生成,我们一般会在客户访问量过小的时候来完成这个操作,那往往都是在凌晨.这时我们也可以采用定时任务来完成逻辑.SpringBoot为我们内置了定时任务,我们只需要一个注解就可以开启定时为我们所用了. 在开发中,定时任务是常见的功能,在spring

  • spring-boot通过@Scheduled配置定时任务及定时任务@Scheduled注解的方法

    串行的定时任务 @Component public class ScheduledTimer { private Logger logger = Logger.getLogger(this.getClass()); /** * 定时任务,1分钟执行1次,更新潜在客户超时客户共享状态 */ @Scheduled(cron="0 0/1 8-20 * * ?") public void executeUpdateCuTask() { Thread current = Thread.curr

  • 微信小程序异步API为Promise简化异步编程的操作方法

    把微信小程序异步API转化为Promise.用Promise处理异步操作有多方便,谁用谁知道. 微信官方没有给出Promise API来处理异步操作,而官方API异步的又非常多,这使得多异步编程会层层回调,代码一复杂,回调起来就想砸电脑. 于是写了一个通用工具,把微信官方的异步API转化为Promise,方便处理(多)异步操作. 你可以这样用: 准备转化后的方法并暴露出 // /utils/wx-promise.js import toPromise from '/module/to-promi

  • 浅谈SpringBoot集成Quartz动态定时任务

    SpringBoot自带schedule 沿用的springboot少xml配置的优良传统,本身支持表达式等多种定时任务 注意在程序启动的时候加上@EnableScheduling @Scheduled(cron="0/5 * * * * ?") public void job(){ System.out.println("每五秒执行一次"); } 为什么要使用Quartz 多任务情况下,quartz更容易管理,可以实现动态配置 执行时间表达式: 表达式示例: 集成

  • SpringBoot下RabbitMq实现定时任务

    本文实例为大家分享了SpringBoot下RabbitMq实现定时任务,供大家参考,具体内容如下 定时任务场景:订单下单15分钟未付款自动关闭 延迟任务实现原理图如下: 根据上图看出我们需要两个队列(一是死信队列,消息在里面度过TLL时间,二是处理队列,消息度过TLL时间后进入该队列),两个交换机和路由(一是用来将消息送入死信队列,二是将消息从死信队列送到处理队列),但是交换机其实可以用同一个,也就是一个交换机搭配两个路由的方式. 以下为代码实现过程: //首先rabbitAdmin的配置 @B

  • SpringBoot基于数据库实现定时任务过程解析

    这篇文章主要介绍了SpringBoot基于数据库实现定时任务过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在我们平时开发的项目中,定时任务基本属于必不可少的功能,那大家都是怎么做的呢?但我知道的大多都是静态定时任务实现. 基于注解来创建定时任务非常简单,只需几行代码便可完成.实现如下: @Configuration @EnableScheduling public class SimpleScheduleTask { //10秒钟执行

随机推荐