加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在数据库更新期间阻止会话超时

发布时间:2020-12-15 00:27:31 所属栏目:Java 来源:网络整理
导读:背景 Web应用程序调用存储过程来执行密集的数据库更新. web.xml的相关部分更新为四小时: session-config session-timeout240/session-timeout/session-config 可用于解决方案的技术包括Java 1.4.2,Struts 2,Tomcat 5.5和Apache commons.大多数其他技术(如jQ
背景

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分钟内优化查询完成(允许的最大超时)是可能的,但是查询无法被充分优化.

硬件

升级数据库硬件不是一个选择,不幸的是.

非常感谢!

解决方法

在我看来,没有用户想要坐在屏幕前面监视一个后台工作4个小时.几年前,我不得不实施需要几个小时的报告生成.实施的解决方案如下:

>在后台线程中生成报表.线程被监视并可通过应用程序上下文列表.该线程包含有关所有者及其进度的信息.>用户可以列出自己的线程并查看进度.>完成后,报告线程将存储报告以进行离线访问,向所有者发送电子邮件通知,链接以下载生成的报告.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读