我们需要在我们的 Servlet 应用程序中实现一个优雅的关闭机制。
编辑:我们想让它尽可能简单,这将处理通过操作系统功能发送的终止信号。这将允许系统管理员使用内置的 shell 实用程序(Windows 上的 kill 或 taskkill),否则他们必须安装另一个实用程序才能与服务器“对话”。
该机制分两个阶段起作用:
- 根据关闭请求,拒绝某些关键活动
- 阻塞,直到先前启动的关键操作完成;这些可能需要几个小时
阶段 #1 在我们的 DAO 层中实现。阶段 #2 在我们的 ServletContextListener#contextDestroyed 方法中实现
我们的问题是,一旦 contextDestroyed 被调用,Servlet 容器就会停止为进一步的 HTTP 请求提供服务。
编辑: contextDestroyed 当有人在服务器进程上调用操作系统的 kill 函数时被调用。
我们希望在第 2 阶段期间让应用程序处于活动状态,通知用户某些活动不可用。