对于大任务,采用创建独立线程处理,如下讨论一下该独立线程如何返回进度予前台,采用那种方案就根据情况了:
一、通过session共享进度信息
通过session可实现进度信息隔离在每个session中,但存在session超时问题,当大任务执行时间超过20分钟,就存在session超时,进度信息丢失问题。
1、从controller中获取获取session对象,传送给线程
request.getSession()
2、在线程中反馈进度信息予session中
this.httpSession.setAttribute("RuleAgentCommisionCompareController_progressOne",progressOne);
3、在进度获取的controller中,获取session信息返回页面
Integer progress=(Integer)request.getSession().getAttribute("RuleAgentCommisionCompareController_progressOne");
Map<String, Object> result = new HashMap<String, Object>();
result.put("progress", progressOne);
return result;
二、采用静态变量共享进度信息
采用静态变量共享进度信息,无法把进度信息隔离在一个session中,但隔离在某个功能中,没有session超时的问题,关闭浏览器重新登录,只要服务器不关闭,依然获取到进度信息。
三、采用Application共享进度信息
可实现,此处不做考虑