我们使用@Async进行多线程。直到每个多线程方法我都能看到RequestContextHolder.getRequestAttributes()的值。
但是当我在方法内部调试时,我得到的请求属性为NULL。
有什么想法吗?
发布于 2018-08-23 03:48:25
为了解决这个问题,我们创建了一个ContextAwareRunnable
对象,该对象预先填充了当前的requestHolder、securityContextHolder等,这样所有派生的线程都可以像在主线程中运行一样执行。
发布于 2018-08-23 17:17:51
默认情况下,ThreadLocal
变量用作请求属性的持有者。这意味着只有处理整个https请求的单个线程才能访问请求属性。相反,@Async
方法是由来自单独线程池的线程处理的,因此它们不能访问属性。
但是,还有一个InheritableThreadLocal
变量可以用作请求属性的持有者,而不是默认的属性持有者。您可以通过在DispatcherServlet
或RequestContextFilter
中将threadContextInheritable
属性设置为true
来启用它。
有关更多详细信息,请查看RequestContextHolder
的实现。
https://stackoverflow.com/questions/51974083
复制相似问题