5

Tomcat に重要なデータをロードする init サーブレットがあります。特定のエラーで起動を中止する必要がある場合があります。

デプロイされたアプリ/アプリサーバー全体を呼び出さずに正常にシャットダウンするにはどうすればよいですかSystem.exit(1)

これはインストールで構成されていないため、ポートを介してシャットダウンサーブレットを呼び出すことを避けたいです。

web.xml で定義されたシャットダウン時にリスナーから実行する必要があるタスクがある場合があります

4

2 に答える 2

7

まず第一にSystem.exit()、サーブレット コンテナー内から呼び出してはいけません。同じプロセス内で他のアプリケーションが実行されている可能性があり、プロセス全体を強制終了するのは非常に不適切です。

「init servlet」が を実装すると仮定すると、「ServletContextListenerアプリをきちんとシャットダウンしてください」というサーブレット コンテナーに通知する API/インターフェイスで定義された正式な方法はありません。RuntimeExceptionただし、メソッドから何らかのものをスローすることもできますcontextInitialized()。これにより、ほとんどのコンテナー (少なくとも Tomcat) で webapp の起動が停止され、「停止」状態のままになります。ただし、Tomcat が引き続きシャットダウン リスナーを呼び出すとは思えません。

重要なデータ/シャットダウン ロジックがサーブレット コンテナーのライフサイクルとあまり密接に結び付けられないように、設計を再考することをお勧めします。

于 2009-10-08T12:48:18.610 に答える