SpringBoot异步调用和异常捕获

线程池配置

@Configuration
@Slf4j
@EnableAsync
public class AsyncThreadPoolConfig implements AsyncConfigurer {

    @Bean(name = "asyncExecutor")
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 核心线程数
        executor.setCorePoolSize(20);
        // 线程池最大线程数
        executor.setMaxPoolSize(20);
        // 线程队列最大线程数
        executor.setQueueCapacity(100);
        // 线程池中线程最大空闲存活时间
        executor.setKeepAliveSeconds(60);
        //核心线程是否允许超时,默认:false
        executor.setAllowCoreThreadTimeOut(false);
        // 线程名称前缀
        executor.setThreadNamePrefix("AsyncThread_");
        // IOC容器关闭时是否阻塞等待剩余的任务执行完成,默认:false(true则必须设置setAwaitTerminationSeconds)
        executor.setWaitForTasksToCompleteOnShutdown(true);
        // 阻塞IOC容器关闭的时间
        executor.setAwaitTerminationSeconds(60);

        executor.setRejectedExecutionHandler(
                new ThreadPoolExecutor.CallerRunsPolicy()
        );

        executor.initialize();

        return executor;
    }

    /**
     * 异常捕获
     *
     * @return
     */
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {

        return new AsyncExceptionHandler();
    }

自定义异常类

public class AsyncExceptionHandler implements AsyncUncaughtExceptionHandler {

        @Override
        public void handleUncaughtException(Throwable throwable, Method method, Object... objects) {

            log.error("AsyncError: {}, Method: {}, Param: {}, Error: {}",
                    throwable.getMessage(), method.getName(),
                    JSON.toJSONString(objects), throwable);
            // 捕获异常后进行进一步的处理
        }
    }

测试

@Async("asyncExecutor")
@Override
public void print(Integer num) {
    if (num.equals(20)) {
        int i = 1 / 0;
    }
    System.out.println("AsyncExecutor: " + num);
}

测试结果

在这里插入图片描述

原文链接:https://blog.csdn.net/qq_37163392/article/details/115284156

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值