Springboot异步情况下可以使用getRequestAttributes().getRequest()吗
时间: 2023-01-15 16:05:24 浏览: 121
是的,可以使用 getRequestAttributes().getRequest() 来获取当前线程的 HttpServletRequest 对象。但是需要注意,如果在异步情况下使用 getRequestAttributes().getRequest(),那么需要先使用 RequestContextHolder.setRequestAttributes(RequestAttributes) 将当前的 RequestAttributes 设置到 RequestContextHolder 中。
例如:
```java
@Async
public void asyncMethod() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(requestAttributes);
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// do something with request
}
```
在方法执行完毕后,记得将 RequestAttributes 从 RequestContextHolder 中清除。
```java
@Async
public void asyncMethod() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(requestAttributes);
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// do something with request
RequestContextHolder.resetRequestAttributes();
}
```
阅读全文