异步调用注解@Async不起作用

2023年5月16日12:05:47

Springboot项目中用到异步发送邮件,部署线上后,邮件服务器异常,接口异常没有返回值,异步调用没起作用
异步调用注解@Async不起作用
检查发现是启动类上漏了注解@**EnableAsync
异步调用注解@Async不起作用

一般失效原因有下列几条:
1.@SpringBootApplication启动类当中没有添加**@EnableAsync**注解。
2.异步方法使用注解@Async的返回值只能为void或者Future。
3.没有走Spring的代理类。因为@Transactional和@Async注解的实现都是基于Spring的AOP,而AOP的实现是基于动态代理模式实现的。那么注解失效的原因就很明显了,有可能因为调用方法的是对象本身而不是代理对象,因为没有经过Spring容器管理。

解决方法:
这里具体说一下第三种情况的解决方法。
1.注解的方法必须是public方法。
2.方法一定要从另一个类中调用,也就是从类的外部调用,类的内部调用是无效的。
3.如果需要从类的内部调用,需要先获取其代理类。

  • 作者:snowflakefengzf
  • 原文链接:https://blog.csdn.net/u013295091/article/details/122540955
    更新时间:2023年5月16日12:05:47 ,共 419 字。