springboot 异步任务
何为异步调用
说异步调用前,我们说说它对应的同步调用。通常开发过程中,一般上我们都是同步调用,即:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕后才执行。而异步调用指:程序在执行时,无需等待执行的返回值可继续执行后面的代码。显而易见,同步有依赖相关性,而异步没有,所以异步可并发执行,可提高执行效率,在相同的时间做更多的事情。
步骤:
1. 自定义一个线程池
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
* 开启异步任务支持
*
* @author chenyong
* @version 1.0
* @create 2018-12-10 13:40
**/
@Configuration
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);//线程池大小
taskExecutor.setMaxPoolSize(10);//线程池最大线程数
taskExecutor.setQueueCapacity(25);//最大等待任务数
taskExecutor.initialize();
taskExecutor.setThreadNamePrefix("asynct-task-"); // 线程名前缀
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
并且添加@EnableAsync注解 启用异步任务
在所需要异步执行的方法上添加@Async注解就可以实现异步任务
当然这个异步方法只能被外部调用才能实现 否则无效果
里面还有一个需要注意的地方就是带有@Async注解的类中如果有相互引用的类的话(A引用B,B里面也有对A的引用) 需要在这2个类上添加@Lazy注解 否则会报错