背景
Web应用程序调用存储过程来执行密集的数据库更新. web.xml的相关部分更新为四小时:
<session-config> <session-timeout>240</session-timeout> </session-config>
可用于解决方案的技术包括Java 1.4.2,Struts 2,Tomcat 5.5和Apache commons.大多数其他技术(如jQuery)是不允许的.
问题
更新需要大约一个小时才能运行,但是四小时的配置值与企业标准(原因很好)相反.生产中不允许四小时超时配置.
题
什么会确保请求在数据库更新执行时不会超时?
思路
在前两种情况下,我关心的是,所产生的进程最终将被Servlet容器杀死.
页面刷新
>将数据库更新过程产生为后台任务.
>有一个Servlet不断地刷新页面以检查完成.
JavaScript Ping
>将数据库更新过程产生为后台任务.
>让JavaScript代码ping服务器一段时间.
类似于Preventing session timeout during long processing time in JSF,但没有jQuery.
更新服务器
编写一个监听请求的简单服务器:
> Servlet向侦听器发送请求.
>侦听器运行更新.
由于服务器独立于Tomcat运行,因此无法进行会话超时.数据库更新将运行到完成,而不会被杀死.这有许多问题(错误处理不是我最关心的),可能是最后的选择.
优化
在30分钟内优化查询完成(允许的最大超时)是可能的,但是查询无法被充分优化.
硬件
非常感谢!