我在quartz作业中迁移了一个异步运行的代码。
现在,当我尝试使用会话范围的视图(在quartz作业完成时调用)时,出现了以下错误:
org.quartz.jobexecutionexception:org.springframework.beans.factory.beancreationexception:创建名为“scopedtarget.vaadinview”的bean时出错:当前线程的作用域“session”未处于活动状态
org.springframework.beans.factory.beancreationexception:创建名为“scopedtarget.vaadinview”的bean时出错
我的想法是:
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public class VaadinView implements View, DisposableBean
我知道quartz作业在另一个线程上运行,会话上下文丢失。因此,在调用作业之前,我将请求属性存储在作业本身中 RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
然后,在调用会话作用域bean之前,我将还原请求属性:
RequestContextHolder.setRequestAttributes(attributes); // workaround
vaadinView.doSomethingOnUI(); // error here
问题是,现在a有相同的错误,但有另一条消息,告诉我会话是必需的:
Caused by: java.lang.IllegalArgumentException: Session must not be null
at org.springframework.util.Assert.notNull(Assert.java:134)
at org.springframework.web.util.WebUtils.getSessionMutex(WebUtils.java:403)
at org.springframework.web.context.request.ServletRequestAttributes.getSessionMutex(ServletRequestAttributes.java:253)
at org.springframework.web.context.request.SessionScope.get(SessionScope.java:91)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:346)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:192)
我的问题是:如何使用quartz作业线程来更新ui
注意:我使用的是grails+vaadin+springboot
暂无答案!
目前还没有任何答案,快来回答吧!