サーブレット アプリケーションにグレースフル シャットダウン メカニズムを実装する必要があります。
編集: オペレーティング システムの機能を介して送信されたキル シグナルを処理する、できるだけ単純にしたいと考えています。これにより、システム管理者は組み込みのシェル ユーティリティ (Windows では kill または taskkill) を使用できるようになります。それ以外の場合は、サーバーと「対話」するためだけに別のユーティリティをインストールする必要があります。
このメカニズムは、次の 2 つのフェーズで機能します。
- シャットダウン要求に応じて、特定の重要なアクティビティを拒否します
- 以前に開始された重要なアクションが完了するまでブロックします。これらには数時間かかる場合があります
フェーズ 1 は、DAO レイヤーに実装されます。フェーズ 2 は、ServletContextListener#contextDestroyed メソッドに実装されています。
問題は、contextDestroyed が呼び出されると、サーブレット コンテナがそれ以降の HTTP リクエストの処理を停止することです。
編集: contextDestroyed は、誰かがサーバーのプロセスでオペレーティング システムの kill 関数を呼び出しているときに呼び出されます。
フェーズ 2 でアプリケーションを有効にして、一部のアクティビティが利用できないことをユーザーに通知します。