У меня есть веб-приложение, в котором я использую ScheduledThreadPoolExecutor для планирования некоторой логики, которая будет выполнена позже (возможно, после завершения первоначального веб-запроса). Возможно ли получить/использовать HttpServletRequest исходного запроса внутри дочернего потока (созданного посредством вызова «расписание» в ScheduledThreadPoolExecutor)?Доступ к запросу HttpServletRequest в дочерней цепочке
Я попытался автоматическим связывание HttpServletRequest внутри класса, функция работает в детской теме, но получил следующие ошибки (которые я понимаю причину)
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/DispatcherPortlet: In this case, use
RequestContextListener or RequestContextFilter to expose the current
request.
Есть ли возможный путь? Возможно ли использовать RequestContextFilter?
No. объекта запроса и запроса в области видимости весенние бобы, не должны использоваться после обработки запроса или даже в отдельном потоке. Извлеките данные, необходимые для запланированного задания, затем отправьте задачу, используя эти данные, исполнителю. –
можно использовать [BeanUtils] (http://grepcode.com/file/repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.8.0/org/apache/commons/beanutils/BeanUtils.java). скопировать объект HttpServletRequest? –
Зачем вам нужен объект HttpServletRequest в запланированном задании? Извлеките данные, необходимые для запланированного задания, на объект и передайте этот объект в задание. –