gpt4 book ai didi

java - 防止数据库更新期间 session 超时

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:11 24 4
gpt4 key购买 nike

背景

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 容器杀死。

页面刷新

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

JavaScript 平

  1. 将数据库更新过程作为后台任务生成。
  2. 让 JavaScript 代码 ping 服务器一段时间。

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

更新服务器

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

  1. Servlet 向监听器发送请求。
  2. 监听器运行更新。

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

优化

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

硬件

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

非常感谢!

最佳答案

在我看来,没有用户愿意坐在屏幕前监视后台作业 4 小时。几年前,我不得不实现需要数小时的报告生成。实现的解决方案如下:

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

关于java - 防止数据库更新期间 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com