Spring @Async 注解的使用

我的项目目前主要使用这个注解做一些与主流程无关的任务,如注册成功完发送短信,当调用第三方接口出错时发送钉钉消息登等,项目为springboot项目

  • 首先你要配置一个  ThreadPoolTaskExecutor,一个项目中可以有多个ThreadPoolTaskExecutor
        @Bean("asyncTaskExecutor")
        public ThreadPoolTaskExecutor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    
            // 核心线程数
            executor.setCorePoolSize(3);
            // 最大线程数
            executor.setMaxPoolSize(20);
            // 队列的深度
            executor.setQueueCapacity(256);
            // 超过改时间线程就被回收
            executor.setKeepAliveSeconds(60);
    
            executor.setThreadNamePrefix("asyncTaskExecutor-");
            // 设置拒绝任务策略,使用当前线程执行本次任务
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            return executor;
        }

    核心线程数队列会影响吞吐量,线程少的话相当于很少的人在干活,自然干的慢一点,吞吐量就低一点,拒绝策略设置为主线程执行任务,当队列满了(有界队列才有这个说法),线程数又等于maxPoolSize,这个时候会执行相应的拒绝策略,默认是拒绝任务抛出一个异常,这里用了主线程执行,毕竟当前任务是不能丢的.

  • 使用注解
@Async 的value 要和 ThreadPoolTaskExecutor bean的名字一样,返回值类型是void,这样就可以异步执行了,快去试试吧
    @Async("asyncTaskExecutor")
    @Override
    public void sendDingTalkTextMsgExecutor(BooleanDataThreeElementsDTO dto) {
    
        DingTalkUtils.sendTextMsgToRobot("出现异常啦");
    }

 

转载于:https://www.cnblogs.com/yangmingzi/p/11199415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值