1.没有在@SpringBootApplication启动类当中添加注解@EnableAsync注解。
2.异步方法使用注解@Async的返回值只能为void或者Future。
3.没有走Spring的代理类。因为@Transactional和@Async注解的实现都是基于Spring的AOP,而AOP的实现是基于动态代理模式实现的。那么注解失效的原因就很明显了,有可能因为调用方法的是对象本身而不是代理对象,因为没有经过Spring容器。
4. 如果你的异步方法所在类被Shiro注解过,需要在Autowired后面添加@Lazy注解。
原因可能是,shiro的框架启动的比较早,在Spring未启动前先将异步执行类加载到了容器里,导致该类所有的Spring注解不再生效。