Springboot中Async异步的使用

为了降低用户得到反馈的时间,有些时候我们采用异步处理去获得消息,比较常见的是MQ,今天记录的是Springboot自带的@Async注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 开启异步
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {

@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
//核心线程数
taskExecutor.setCorePoolSize(8);
//最大线程数
taskExecutor.setMaxPoolSize(16);
//队列大小
taskExecutor.setQueueCapacity(100);
taskExecutor.initialize();
return taskExecutor;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 使用方法
@Async
public Future<TPromotionSeckill> update() throws InterruptedException {
Thread.sleep(5000);
System.out.println("开始异步执行任务");
TPromotionSeckill promotionSeckill = service.updateByPrimaryKeySelective();
System.out.println("结束异步执行任务");
return new AsyncResult<>(promotionSeckill);
}

@Test
public void update() throws InterruptedException, ExecutionException, IOException {
// 异步操作,无需等待结果,先执行接下去的
Future<TPromotionSeckill> update = asy.update();
System.out.println("先进行这一步");
// 循环等待直到先前异步的操作有结果后,获得结果后,程序才继续进行下去
TPromotionSeckill seckill = update.get();
System.out.println("最后进行这一步");
}

Result
-----------------------------------------------------------------------
先进行这一步
开始异步执行任务
结束异步执行任务
最后进行这一步
赏个🍗吧
0%