Springboot2.x整合异步任务
16lz
2021-01-22
我们知道异步比同步快很多,节省更多的时间,也会提高效率。因此这篇文章主要讲解Springboot2.x来整合异步任务。通过案例来体会异步任务的思想。
一、开发环境
名称 | 版本 |
---|---|
Idea | 2018专业版(已破解) |
Maven | 4.0.0 |
SpringBoot | 2.2.2 |
jdk | 1.8 |
还是老样子,群里面的朋友提供了最新的破解码。需要的私聊。以下代码亲测成功。
二、代码实现
异步任务的实现说实话非常简单。
第一步:创建SpringbootAsyncTask项目
第二步:开启异步任务的开关
1@SpringBootApplication
2@EnableAsync//打开异步任务开关
3public class SpringbootasynctaskApplication {
4 public static void main(String[] args) {
5 SpringApplication.run
6 (SpringbootasynctaskApplication.class, args);
7 }
8}
只需要在启动类里面添加一个注解开关即可。
第三步:新建MyAsyncTask类
1@Component
2public class MyAsyncTask {
3 @Async
4 public void task1() throws InterruptedException {
5 long start = System.currentTimeMillis();
6 Thread.sleep(1000);
7 long end = System.currentTimeMillis();
8 System.out.println("任务一耗时:"+ (end-start)+"毫秒");
9 }
10 //任务2,我们不添加注解,便于验证
11 public void task2() throws InterruptedException {
12 long start = System.currentTimeMillis();
13 Thread.sleep(2000);
14 long end = System.currentTimeMillis();
15 System.out.println("任务二耗时:"+ (end-start)+"毫秒");
16 }
17 //任务3,我们不添加注解,便于验证
18 public void task3() throws InterruptedException {
19 long start = System.currentTimeMillis();
20 Thread.sleep(3000);
21 long end = System.currentTimeMillis();
22 System.out.println("任务三耗时:"+ (end-start)+"毫秒");
23 }
24}
在这里定义了3个任务,但是只有在第一个任务方法上加了异步注解。这是为了便于我们的时间验证。
第四步:新建MyController类
1@Controller
2public class MyController {
3 @Autowired
4 private MyAsyncTask asyncTask;
5 @GetMapping("/test")
6 public void test() throws InterruptedException {
7 long start = System.currentTimeMillis();
8 asyncTask.task1();
9 asyncTask.task2();
10 asyncTask.task3();
11 long end = System.currentTimeMillis();
12 System.out.println("任务全部完成,总耗时:"+(end-start)+"毫秒");
13 }
14}
这个类的功能很明显,就是调用了三个方法。
第五步:访问链接,测试一下
1任务一耗时:1000毫秒
2任务二耗时:2000毫秒
3任务三耗时:3001毫秒
4任务全部完成,总耗时:5011毫秒
我们发现三个任务加起来本来大致6秒,但是5秒就结束了,这是因为任务1是异步执行的,注意这里不是严格的3秒和5秒,这是因为虚拟机还做了一些其他的操作。
异步任务的应用场景非常多,比如说发送短信、发送邮件、消息推送、定时发布消息等等。不过一般结合其他的技术来实现我们的功能。这个实现起来非常的简单。
更多相关文章
- Springboot整合mybatis(注解而且能看明白版本)
- 扒一扒 @SpringBootApplication 注解背后的奥秘!
- 聊聊java中的注解
- java中的注解,真的很重要,别不会用了
- Mongodb 的ORM框架 Morphia 注解二 —————— @Id
- UNIX-LINUX编程实践教程->第八章->实例代码注解->写一个简单的sh
- 注解匹配表字段与实体字段
- 理解Java注解(java.lang.annotation)
- 实现基于注解(Annotation)的数据库框架(一)反射的基本了解