11

ServletContextListener起動時にいくつかのリソースをロードするクラスを実装しています。

これらのリソースは、ロジックで悪いイベントが発生したときにスタートアップ全体を失敗させたいという意味で、アプリケーションにとって重要です。

ServletContextListener.contextInitialized()Tomcat の起動全体を停止して失敗させるために、メソッド内から実行できるコマンドはありますか?

4

2 に答える 2

12

指定してみてください:

-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE=true

ランタイムオプションで、公式ドキュメントjavaを引用します。

trueの場合、サーバーの初期化フェーズ中に例外が発生すると、サーバーは終了します。

指定しない場合、デフォルト値のfalseが使用されます。

アップデート:

これをコードで実行したい場合は、System.exit()機能しますか?

public class FailFastListener implements ServletContextListener {
    
    private static final Logger log = LoggerFactory.getLogger(FailFastListener.class);
    
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        try {
            //initialization
        } catch(Exception e) {
            log.error("Sooo bad, shutting down", e);
            System.exit(1);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    }
}

パターンを使用すると、既存のリスナーを乱雑にすることなくラップできます。Tomcatがどのように反応するかわからない...

于 2012-12-18T12:18:43.460 に答える