我们的 Java 8 和基于 Spring 的应用程序正在后台生成批量报告(PDF 文件)。这可能需要超过一到两个小时。生成每个报告后,在 UI(前端)中更新了百分比值的进度,因此 UI 在完成报告生成之前一直处于 Activity 状态,但由于某种原因我们得到 session 过期 报告生成过程中来自 Vaadin 框架的 UI 中的消息。
Vaadin 框架版本:7.6.2
网络服务器:Tomcat 7
心跳持续时间的值:默认值(未配置显式值)
web.xml 中 session 超时持续时间的值:默认为 30 分钟
closeIdleSessions 的值没有变化(默认情况下 closeIdleSessions=false)
任何人都可以帮忙找出原因吗?
最佳答案
如果唯一的 Activity 是通过 @Push
推送状态更新websocket,那么这可能不足以在 servlet 级别推迟 session 到期。
您可以通过确保不时有来自客户端的正常请求来解决此问题,只需重置 session 超时即可。这可以通过长时间间隔启用 UI 轮询来完成,例如ui.setPollInterval((int) Duration.ofMinutes(25).toMillis());
.
请记住在完成长任务后禁用轮询,否则它将继续保持您的 session 处于 Activity 状态。
关于java - 获取 Activity UI 的 "Session Expired"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67818412/