【发布时间】:2019-05-05 19:59:28
【问题描述】:
我已经在我的 Spring Boot 应用程序中启用了异步功能:
@Configuration
@EnableAsync
public class BackOfficeConfiguration {}
我已经创建了这个异步方法:
@Async
public void importDocuments() {}
importDocuments 代码只是:
@Async
public void importDocuments() {
// Do something
// Get current request context
ServletRequestAttributes requestAttributes =
(ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
}
在RequestContextHolder.currentRequestAttributes() 上,spring boot 让我遇到了这个异常:
java.lang.IllegalStateException:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet/DispatcherPortlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。
如何在异步方法中获取当前的HttpServletRequest?
【问题讨论】:
-
不要。将所需的对象/数据传递到方法中,或者为您的 Web 层使用适当的异步。
标签: spring spring-boot