• @Async 异步注解不起作用的坑


    背景

    今天在做项目的时候要在接口功能完成后要保存操作记录。为了防止保存操作记录功能异常影响主功能,于是打算将保存操作记录方法设置为异步调用。

    spring项目中使用异步很简单,只要在异步方法上方放一个@Async注解就可以了。但是今天发现一个坑。

    项目是tomcat启动的项目,不是springboot项目。如果要使用这个注解,那么需要在spring配置文件中配置一个异步执行器的线程池才能有用,如下

    <!--    异步-->
        <task:executor id="executor" pool-size="5"/>
        <task:annotation-driven executor="executor"/>

    但是,加了之后还是没用

    解决

    项目的service层是采用接口和接口实现类设计的,一开始我把@Async注解放在了接口实现类的saveProjectHistory()方法上,没有起作用。但是把@Async注解放在接口的saveProjectHistory()方法定义上就有用了。

    至于具体原因,暂时不知道。

  • 相关阅读:
    Callable的Future模式
    并发队列
    并发工具类和线程池
    安全与死锁问题
    ConcurrentHashMap底层实现
    Map集合常见面试题
    List集合框架
    类加载器
    Activiti中个人任务分配
    流程定义
  • 原文地址:https://www.cnblogs.com/qingshan-tang/p/12937616.html
Copyright © 2020-2023  润新知