异步调用@Async

2018-12-20  本文已影响0人  轻易流逝

1、在spring boot的启动类上标注@EnableAsync(扫描到就行)
2、在需要异步执行的方法上标注@Async
简单两步完成异步调用

一、异步方法也可以有返回值:

    @Async
    public Future<String> asyncRetStr(){
        return new AsyncResult<String>("async run success!");
    }

二、静态方法上的@Async会失效
三、异步方法上标注的@Transactional也会失效
四、异步执行中的异常在ExceptionHandlerHandlerExceptionResolver中是无法处理的,我们可以通过下面的方式统一处理异步执行中的异常
五、我们可以为异步执行配置自定义的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) {
                //这个地方可以处理异步执行中的异常
            }
        };
    }
}
上一篇下一篇

猜你喜欢

热点阅读