处理请求时Tomcat会话超时

时间:2015-03-27 07:36:27

标签: java session tomcat java-ee

我面对的情况是,保持session.setMaxInactiveInterval(15*60) //15 minutes

一切正常

现在,在应用程序中有一个请求正在保存用户数,这在服务器端需要15分钟以上,因为在保存每个用户的同时涉及内部许多操作。

当从浏览器执行saveUser操作时,在服务器上收到请求,开始处理,15分钟后客户端看到“会话超时”但用户保存操作仍在继续。

我想避免这种情况,需要的是服务器当时收到请求,直到它回应客户端的时间不将中间时间视为非活动时间。

我可以通过将setMaxInactiveInterval(-1)作为我的方法saveUser的第一行,并在将响应作为setMaxInactiveInterval(15*60)之前完成。

我正在寻找标准方法,或者这是遵循的标准方法? 是否为这种情况提供了内置的Tomcat配置?

1 个答案:

答案 0 :(得分:1)

标准的Java EE方法如下:

  • 不是在Web层中进行所有处理,而是将所有细节放在JMS队列上并立即返回请求。
  • 数据将由工作人员从JMS队列中取出(可能在不同的服务器上,因为您不希望在Web层上创建15分钟的负载)
  • 为用户创建数据后,将生成通知(例如,浏览器可以每隔30秒查询用户代是否已完成)。

N.B。阻止服务器中的一个线程15分钟是一个非常糟糕的主意,因为它本质上意味着你的servlet容器不能对该线程做任何其他事情。想象一下,如果大量的请求同时进入,你的网络层可能会在压力下屈服......

N.B.2:15 * 50不会15分钟