失效原因
- Application启动类中没有添加@EnableAsync注解开启异步;
- 添加async注解的方法和当前调用者在同一个类中,会导致async失效;
使用了async注解后,导致应用出现循环依赖的报错
解决办法:
- 将async注解的方法移到一个新的service类中,可以快速解决;
- 当然你也可以使用@lazy注解去处理那些导致循环依赖的类;
为什么在@async注解的方法中,通过RequestContextHolder 获取 HttpServletRequest为空呢?
因为通过@async注解的方法,会被springboot丢到线程池中去执行,就等于开启了新的线程;
但是RequestContextHolder使用ThreadLocal保存request实例的,那么如果在新的线程中肯定会获取不到request的;
如果同学们不了解ThreadLocal,可以去了解下,并切这个在面试过程中会经常问到的;
那么怎么能在async中获取到request呢?
建议在调用异步方法的时候,将request作为参数传递到异步方法中 。
微信搜一搜【乐哉开讲】关注帅气的我,回复【干货领取】,将会有大量面试资料和架构师必看书籍等你挑选,包括java基础、java并发、微服务、中间件等更多资料等你来取哦。