@async方法中的Session scoped bean的BeanCreationException

时间:2016-03-15 04:06:12

标签: spring multithreading asynchronous spring-session

我遇到了在异步方法中访问会话范围bean的问题。

My Bean定义:

<bean name="ABC" class="java.util.HashMap" scope="session">
<aop:scoped-proxy />
</bean>

我的控制器类有注释&#39; @ EnableAsync&#39;。 我在控制器中使用异步方法自动装配类:

@Autowired
AsyncWorker asyncWorker;

当调用异步方法时,它会尝试通过以下代码行获取上面定义的会话bean:

Map<String, Object> sessionMap = context.getBean("ABC");

最终会出现以下错误

org.springframework.beans.factory.BeanCreationException:创建名称为&#39; scopedTarget.ABC&#39;:Scope&#39; session&#39;当前线程不活动;考虑为这个bean定义一个范围代理,如果你想从一个单例引用它;嵌套异常是java.lang.IllegalStateException:找不到线程绑定请求:您是指在实际Web请求之外的请求属性,还是在最初接收线程之外处理请求?如果您实际在Web请求中操作并仍然收到此消息,则您的代码可能在DispatcherServlet / DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter来公开当前请求。

RequestContextListener也在我的web.xml中定义。

当呼叫同步时,一切正常。 启动新线程或使用Async方法会导致相同的错误。 任何有关这方面的帮助将不胜感激。

0 个答案:

没有答案