异常信息:
cause: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request..
错误原因大致是因为主线程完成后,子线程不能获取request请求信息,包括session等导致此错误。
解决方案:只要在开启新线程前添加如下,让子线程共享主线程servletRequestAttributes即可,亲测可用
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(servletRequestAttributes,true);
解决No
thread
-
bound
request
found: Are you
ref
erring
to
request
attributes
out
si
de of an actual web re
纠结了半天的
java
.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料
出这个
错误
一般就是下面2个.....
No
thread
-
bound
request
found: " +
"Are you
ref
erring
to
request
attributes
out
si
de of an actual web
request
, " +
"or proces
si
ng a
request
out
si
de of the originally receiving
thread
?
定时任务 "No
thread
-
bound
request
found"
错误
通常是由于在没有请求上下文的情况下执行了需要请求上下文的操作而引起的。在定时任务中,由于没有与请求关联的线程,无法获取当前请求的上下文。
要解决这个问题,你可以尝试以下几种方法:
1. 检查你的定时任务代码,确保没有依赖于请求上下文的操作。如果有,你可以考虑重构代码以避免这种依赖性。
2. 如果你确实需要使用请求上下文,你可以手动创建一个假的请求上下文,并将其与定时任务关联起来。这可以通过使用"
Request
ContextHolder"类来实现。例如:
Servlet
Request
Attributes
request
Attributes
= new Servlet
Request
Attributes
(
request
);
Request
ContextHolder.set
Request
Attributes
(
request
Attributes
);
请注意,这种方法仅适用于在定时任务中模拟请求上下文,并不会提供真实的请求信息。
3. 如果你使用的是Spring框架,你可以考虑使用`@EnableScheduling`注解来配置定时任务,并确保在定时任务中使用`@Async`注解。这将在每个定时任务方法调用时创建一个新的线程,并为其分配一个新的请求上下文。
希望这些方法能帮助你解决问题!如果有任何进一步的疑问,请随时提问。