1、在spring boot的启动类上标注@EnableAsync
(扫描到就行)
2、在需要异步执行的方法上标注@Async
简单两步完成异步调用
一、异步方法也可以有返回值:
@Async
public Future<String> asyncRetStr(){
return new AsyncResult<String>("async run success!");
}
二、静态方法上的@Async
会失效
三、异步方法上标注的@Transactional
也会失效
四、异步执行中的异常在ExceptionHandler
、HandlerExceptionResolver
中是无法处理的,我们可以通过下面的方式统一处理异步执行中的异常
五、我们可以为异步执行配置自定义的Executor
:
public class AsyncConf implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new AsyncUncaughtExceptionHandler() {
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
//这个地方可以处理异步执行中的异常
}
};
}
}
网友评论