赞
踩
突发奇想,就想玩一下异步任务,记得之前项目有个场景需要使用异步执行,但是异步调用没有成功,后来采用了多线程去执行,今天就系统的学习下异步执行任务。记录一下
有时候在项目中,当访问其他人的接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行, 我们可以使用多线程来并行的处理任务,也可以使用
spring
提供的异步处理方式@Async
。
在异步处理的方法上添加注解 @Async
,就会启动一个新的线程去执行。
Spring
通过任务执行器 TaskExecutor
,来实现多线程和并发编程,使用 ThreadPoolTaskExecutor
可实现一个基于线程池的 TaskExecutor
;
异步需要在配置类上面加 @EnableAsync
来开启对异步任务的支持在需要异步执行的方法上面加 @Async
来声明这个方法是一个需要异步执行的方法;
让配置类实现 AsyncConfigurer
接口,并重写 getAsyncExecutor
方法,并返回一个 ThreasPoolTaskExecutor
,就可以获取一个基于线程池的 TaskExecutor
;
@Async
用在方法上,表示这个方法是一个异步的方法,如果用在类上面,表明这个类中的所有方法都是异步的方法。
- <!--SpringBoot版本-->
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.5.3</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <!--相关插件-->
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- package com.mobaijun.config;
-
- import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
- i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。