【发布时间】:2015-07-27 15:19:26
【问题描述】:
我需要从控制器运行一些耗时的任务。为此,我在我的服务中实现了一个@Async 方法,以便控制器可以立即返回(例如202 Created 状态)。
问题是任务需要访问一些会话范围的 bean。通过这种方法,我得到了org.springframework.beans.factory.BeanCreationException: Error creating bean with name (...): Scope 'session' is not active for the current thread (...)。
当我手动创建 ExecutionService 而不是 @Async 时,结果相同。
是否有可能以某种方式使工作线程附加到当前会话?
编辑 目的是实现批量操作,提供一种监控处理状态的方法。类似于此答案中描述的内容:https://stackoverflow.com/a/28787774/718590
如果我同步运行它,将不会显示状态(处理了多少项),并且可能会出现请求超时。
【问题讨论】:
-
你能分享更多细节吗?在异步执行期间你真的需要它吗?你能事先提取所需的信息吗?或者你只需要像stackoverflow.com/questions/29716119/…一样在之后存储结果?
-
@sodik 我已经为问题添加了更多细节。
-
@AndreiI 我没有将线程附加到会话中。是 Spring 维护线程和会话之间的连接。
标签: java spring spring-mvc session asynchronous