在Spring中,我有很多使用如下定义的会话bean的代码:
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
在我的webapplication中,一切都很好,因为会话范围是 可用。
在我的JUnit测试中,一切都很好,因为我正在使用
注册线程的WebContextTestExecutionListener
(link)
会议范围的范围
但是当调用@Scheduled
的方法时,我得到一个例外,因为没有
会议范围。
现在我的问题是:如何在我的@Scheduled
方法中为会话范围注册线程范围?
我尝试过这样的事情:beanFactory.registerScope("session", new SimpleThreadScope());
但是这也覆盖了我的webapplication的会话范围:(
答案 0 :(得分:2)
计划任务与sessionscope无关,甚至可以在计划任务执行时终止会话。如果计划任务需要会话中的数据,则只需将包含数据的新对象传递给计划方法。
答案 1 :(得分:0)
事实证明,这个问题与spring 3 scheduled task running 3 times非常相关。由于我的ContextLoaderListener和DispatcherServlet指向相同的上下文配置,因此范围被覆盖。 @ skaffman / Wesley:感谢您的评论。