异步操作导致异步线程获取不到主线程的request信息,java.lang.IllegalStateException: No thread-bound request found

一、异常分析:

java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
	at com.zw.baseutil.auth.FeignConfig.apply(FeignConfig.java:30) ~[baseUtil-baseUtil-8.25-1.jar:baseUtil-8.25-1]
	at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:176) ~[feign-core-10.7.4.jar:?]
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:101) ~[feign-core-10.7.4.jar:?]
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80) ~[feign-core-10.7.4.jar:?]
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-10.7.4.jar:?]
	at com.sun.proxy.$Proxy214.getQuestion(Unknown Source) ~[?:?]

该错误信息在RequestContextHolder这个类中,原因如标题所说,主线程的请求结束后销毁了request,子线程得不到request信息。

二、解决方法:

在主线程里添加以下代码(要在调用异步方法之前添加):

ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(sra, true);

代码注解:将RequestAttributes对象设置为子线程共享

完美解决!!!

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值