Springboot2.x整合异步任务(完整案例)

简介: 我们知道异步比同步快很多,节省更多的时间,也会提高效率。因此这篇文章主要讲解Springboot2.x来整合异步任务。通过案例来体会异步任务的思想。

一、开发环境


v2-1fac4d4632e0ff77829ed56f47de8969_1440w.jpg

二、代码实现


异步任务的实现说实话非常简单。


第一步:创建SpringbootAsyncTask项目


第二步:开启异步任务的开关

@SpringBootApplication
@EnableAsync//打开异步任务开关
public class SpringbootasynctaskApplication {
    public static void main(String[] args) {
        SpringApplication.run
        (SpringbootasynctaskApplication.class, args);
    }
}

只需要在启动类里面添加一个注解开关即可。


第三步:新建MyAsyncTask类


@Component
public class MyAsyncTask {
    @Async
    public void task1() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任务一耗时:"+ (end-start)+"毫秒");
    }
    //任务2,我们不添加注解,便于验证
    public void task2() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("任务二耗时:"+ (end-start)+"毫秒");
    }
    //任务3,我们不添加注解,便于验证
    public void task3() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("任务三耗时:"+ (end-start)+"毫秒");
    }
}

在这里定义了3个任务,但是只有在第一个任务方法上加了异步注解。这是为了便于我们的时间验证。


第四步:新建MyController类


@Controller
public class MyController {
    @Autowired
    private MyAsyncTask asyncTask;
    @GetMapping("/test")
    public void test() throws InterruptedException {
        long start = System.currentTimeMillis();
        asyncTask.task1();
        asyncTask.task2();
        asyncTask.task3();
        long end = System.currentTimeMillis();
        System.out.println("任务全部完成,总耗时:"+(end-start)+"毫秒");
    }
}

这个类的功能很明显,就是调用了三个方法。


第五步:访问链接,测试一下


任务一耗时:1000毫秒
任务二耗时:2000毫秒
任务三耗时:3001毫秒
任务全部完成,总耗时:5011毫秒

我们发现三个任务加起来本来大致6秒,但是5秒就结束了,这是因为任务1是异步执行的,注意这里不是严格的3秒和5秒,这是因为虚拟机还做了一些其他的操作。


异步任务的应用场景非常多,比如说发送短信、发送邮件、消息推送、定时发布消息等等。不过一般结合其他的技术来实现我们的功能。这个实现起来非常的简单。

相关文章
|
9月前
|
人工智能 安全 Java
Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
在Java开发中,处理大规模数据时常常需要将列表拆分为多个子列表进行异步处理并汇总结果。本文介绍如何在Spring Boot中使用Function和异步线程池实现高效且可维护的代码,涵盖结果封装、线程池配置、列表拆分处理及结果汇总等关键步骤。
376 0
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
226 0
|
9月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
883 2
|
10月前
|
SQL JSON Java
|
10月前
|
Java Spring
如何优雅的实现 SpringBoot 并行任务
我是小假 期待与你的下一次相遇 ~
208 1
|
Java 调度 数据库
SpringBoot整合XXL-JOB【05】- 任务分片
在实际业务中,批量定时任务可能因上一批任务未完成而影响业务。为解决此问题,本文介绍如何使用Xxl-job对批量任务进行分片处理,通过分片广播形式调度集群机器并行执行任务,大幅提升执行效率。具体步骤包括环境准备、添加依赖和配置、声明实体类与查询类,以及改造业务逻辑实现分片查询。测试结果显示,分片处理将两千条数据的执行时间从30秒缩短至15秒,性能提升显著。
2097 13
SpringBoot整合XXL-JOB【05】-  任务分片
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
2577 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
966 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
3431 2
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
消息中间件 Java Kafka
springboot项目启动报错-案例情景介绍
springboot项目启动报错-案例情景介绍
878 3

热门文章

最新文章

下一篇
开通oss服务