前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工作经验|async 注解失效的原因以及如何在async中拿到request

工作经验|async 注解失效的原因以及如何在async中拿到request

作者头像
AI码师
发布2020-11-19 15:53:58
2K0
发布2020-11-19 15:53:58
举报

点击上方蓝字关注我们 文末有惊喜

失效原因

  • Application启动类中没有添加@EnableAsync注解开启异步;
  • 添加async注解的方法和当前调用者在同一个类中,会导致async失效: 因为在本方法内调用异步方法不会被AsyncAnnotationAdvisor切面拦截进行代理,如果不能被代理的话,那么走的肯定还是普通方法,导致异步失效。

使用了async注解后,导致应用出现循环依赖的报错

解决办法:

  • 将async注解的方法移到一个新的service类中,可以快速解决;
  • 当然你也可以使用@lazy注解去处理那些导致循环依赖的类;

为什么在@async注解的方法中,通过RequestContextHolder 获取 HttpServletRequest为空呢?

因为通过@async注解的方法,会被springboot丢到线程池中去执行,就等于开启了新的线程;但是RequestContextHolder使用ThreadLocal保存request实例的,那么如果在新的线程中肯定会获取不到request的;如果同学们不了解ThreadLocal,可以去了解下,并切这个在面试过程中会经常问到的;

那么怎么能在async中获取到request呢?

建议在调用异步方法的时候,将request作为参数传递到异步方法中

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哉开讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 失效原因
  • 使用了async注解后,导致应用出现循环依赖的报错
  • 为什么在@async注解的方法中,通过RequestContextHolder 获取 HttpServletRequest为空呢?
  • 那么怎么能在async中获取到request呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档