java - 返回响应后,RequestContextHolder 中设置的属性丢失

标签 java spring spring-boot

我在 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/

相关文章:

java - 带有嵌入式 tomcat 的 Spring Boot 在一个端口上运行,但它不起作用

java - 是否可以扫描 android 类路径以获取注释?

java - Android Youtube V3 简单 API 403 错误 : accessNotConfigured

spring - 如何在AOP中实现策略模式

java - 如何从 Apache CXF 中的 ContainerRequestFilter 获取目标资源

java - Spring,通过反序列化创建一个bean

Java Spring TransientPropertyValueException 与 @OneToMany

java - SPOJ解决方案提交

java - 如何使用 PKCS12 keystore 以 SSL 模式运行 jetty 服务器?

java - Spring Boot 错误消息不起作用