首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RequestContextHolder.getRequestAttributes()在@Async之后获取null

RequestContextHolder.getRequestAttributes()在@Async之后获取null
EN

Stack Overflow用户
提问于 2018-08-23 03:44:18
回答 2查看 4.2K关注 0票数 1

我们使用@Async进行多线程。直到每个多线程方法我都能看到RequestContextHolder.getRequestAttributes()的值。

但是当我在方法内部调试时,我得到的请求属性为NULL。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-08-23 03:48:25

为了解决这个问题,我们创建了一个ContextAwareRunnable对象,该对象预先填充了当前的requestHolder、securityContextHolder等,这样所有派生的线程都可以像在主线程中运行一样执行。

票数 2
EN

Stack Overflow用户

发布于 2018-08-23 17:17:51

默认情况下,ThreadLocal变量用作请求属性的持有者。这意味着只有处理整个https请求的单个线程才能访问请求属性。相反,@Async方法是由来自单独线程池的线程处理的,因此它们不能访问属性。

但是,还有一个InheritableThreadLocal变量可以用作请求属性的持有者,而不是默认的属性持有者。您可以通过在DispatcherServletRequestContextFilter中将threadContextInheritable属性设置为true来启用它。

有关更多详细信息,请查看RequestContextHolder的实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51974083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档