首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止数据库更新期间的会话超时

防止数据库更新期间的会话超时
EN

Stack Overflow用户
提问于 2011-05-11 08:34:16
回答 2查看 11.4K关注 0票数 10

背景

web应用程序调用存储过程来执行密集的数据库更新。web.xml的相关部分更新为4小时:

代码语言:javascript
复制
<session-config>
    <session-timeout>240</session-timeout>
</session-config>

该解决方案可用的技术包括Java1.4.2、Struts 2、Tomcat5.5和Apache。大多数其他技术(如jQuery)是不允许的。

问题

这个更新大约需要一个小时才能运行,但是配置值为4小时是违反公司标准的(理由很充分)。生产中不允许进行4小时超时配置。

问题

在执行数据库更新时,如何确保请求不超时?

想法

我在前两种情况中担心的是,生成的进程最终将被Servlet容器杀死。

页面刷新h

  1. 将数据库更新过程派生为后台任务。
  2. 有一个Servlet不断刷新页面以检查是否完成。

JavaScript平

  1. 将数据库更新过程派生为后台任务。
  2. 让JavaScript代码在一段时间内对服务器进行平分。

类似于Preventing session timeout during long processing time in JSF,但没有jQuery。

更新服务器

编写一个侦听请求的简单服务器:

Servlet向listener.

  • The侦听器发送一个请求,运行.。

由于服务器独立于Tomcat运行,因此不能发生会话超时。数据库更新将在不被终止的情况下运行到完成。这有许多问题(错误处理不是我最关心的问题),而且很可能是最后的选择。

优化

优化查询以在30分钟内完成(允许的最大超时时间)是可能的,但很可能无法对查询进行充分优化。

硬件

不幸的是,升级数据库硬件不是一种选择。

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-12 14:33:14

在我看来,没有用户愿意坐在屏幕前监视背景作业4小时。几年前,我不得不完成几个小时的报告生成。已执行的解决办法如下:

  • 在后台线程中生成报表。线程通过应用程序上下文列表被监视和可用。该线程包含有关所有者的信息,它们的progress.
  • Users可以列出它们自己的线程并查看进度。
  • 在完成后将存储报表以供脱机访问,向所有者发送电子邮件通知,并提供一个链接来下载生成的报表。

票数 4
EN

Stack Overflow用户

发布于 2011-05-11 09:05:43

通过阅读its,我可以确保你有两个选择,即使第二个是困难的,这是最好的过程。

1)页面刷新

  1. 将数据库更新过程派生为后台任务。
  2. 有一个Servlet不断刷新页面以检查是否完成。

2)优化

优化查询以在30分钟内完成(允许的最大超时时间)是可能的,但很可能无法对查询进行充分优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5961403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档