网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

async注解失效的原因以及如何在async中拿到request

async注解失效的原因以及如何在async中拿到request,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

专业领域包括网站设计制作、网站建设购物商城网站建设、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,创新互联建站的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。

 

失效原因

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

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

解决办法:

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

 

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

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

 

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

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


本文标题:async注解失效的原因以及如何在async中拿到request
网页路径:http://bjjierui.cn/article/gsococ.html

其他资讯