我在 SpringBoot 中公开了一个服务,并且在 RequestContextHolder 中存储了一些属性。在我的一个 API 中,我必须异步执行一些 Activity 。应用程序接受请求并创建一个新线程来执行该 Activity ,并立即返回响应。我也将 RequestContextHolder 对象传递给线程。线程尝试从 RequestContextHolder 获取属性,在发送响应后它看起来像是 null。如果我在线程完成执行后返回响应,则该值在线程中可用。我假设 RequestContextHolder 与 HTTPRequest 绑定(bind)在一起,并且在返回响应时它会丢失。我的假设正确吗?如果是这样,我该如何处理这种情况?
org.springframework.web.context.request.RequestContextHolder
最佳答案
在 Spring Boot 应用程序中,RequestContextFilter 将请求设置为 RequestContextHolder,在其中将其存储为线程局部变量,并在 Controller 返回后清除它。使用 RequestContextHolder 作为另一个线程的参数不是正确的方法,因为它的内容在处理过程中可能会发生变化。
在通过RequestContextHolder.getRequestAttributes()开始新的并发任务之前使用实际的请求,它包含所有的属性集,只是一个普通的对象,下面没有ThreadLocal。
关于java - 返回响应后,RequestContextHolder 中设置的属性丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033295/