我在Tomcat上有一份长期工作。这是一个数据转换,用于为新版本更新数据库,以防万一。在我们的开发服务器上运行需要7个小时,但没有问题。每隔60秒,它会向浏览器发送一条进度消息,告知您它仍处于活动状态并保持连接处于活动状态。
然后我尝试在另一台服务器上运行它,120分钟后它失败并出现异常,“getAttribute:Session已经失效”。我重新启动它并在120分钟后再次失败并显示相同的消息。它有一个功能,在某些关键点重新开始,所以我在“第2部分”开始它,并再次在120分钟死亡。
我在服务器中得出的结论是施加120分钟的时间限制 - 由于程序错误在连续3次完全相同的时间内死亡,这太过巧合了,尤其是第三次运行会有不同的数据。
Tomcat< session-timeout>在我们的开发服务器上设置为30,并且在该服务器上它运行了7个小时没有问题,所以无论有什么限制,我都不认为是这样。
关于什么让我失望的任何线索?我猜测那里有另一种超时,但我不知道它是什么。
答案 0 :(得分:3)
您是否可以对作业进行后台处理并让它更新一个资源,以便您可以轮询状态而不是整个时间保持连接?
您可以使用线程轻松完成此操作。
答案 1 :(得分:1)
来自here:
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK
如果这是真的,或者如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE为真,Tomcat将跟踪每个会话的活动请求数。在确定会话是否有效时,任何具有至少一个活动请求的会话将始终被视为有效。
如果未指定,将使用默认值false。