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秒,这是因为虚拟机还做了一些其他的操作。


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

相关文章
|
4天前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
49 5
|
4天前
|
JSON 前端开发 Java
Springboot mvc开发之Rest风格及RESTful简化开发案例
Springboot mvc开发之Rest风格及RESTful简化开发案例
15 2
|
4天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
15 2
|
2天前
|
监控 安全 Java
Spring Boot优雅Shutdown时异步线程安全优化
Spring Boot优雅Shutdown时异步线程安全优化
|
3天前
|
Java 测试技术
springboot延时任务
springboot延时任务
8 0
|
3天前
|
SQL API 调度
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
10 0
|
4天前
|
Java API 调度
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
9 0
|
29天前
|
Java 数据库 Spring
springboot 解耦、隔离、异步的原则以及实战
【5月更文挑战第30天】在Spring Boot中实现解耦、隔离和异步的原则,能够提升应用程序的可维护性、可扩展性和性能。下面我会先介绍这三个原则的基本概念和意义,然后通过实战示例展示如何在Spring Boot应用中应用这些原则。
42 1
|
1月前
|
IDE Java Maven
Springboot中Processor注解概念以及实战案例
【5月更文挑战第28天】在Spring Boot中,没有直接名为Processor的注解。不过,你可能是在谈论与Spring Boot相关的注解处理器(Annotation Processors)的概念,尤其是在处理自定义注解或@ConfigurationProperties注解时的情况。
41 1
|
1月前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
44 0
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例