Spring Bootの終了コード

スプリングブート終了コード

1. 概要

すべてのアプリケーションは、終了時に終了コードを返します。このコードは、負の値を含む任意の整数値にすることができます。

このクイックチュートリアルでは、SpringBootアプリケーションから終了コードを返す方法を説明します。

2. スプリングブートおよび終了コード

起動時に例外が発生した場合、Spring Bootアプリケーションはコード1で終了します。 それ以外の場合、クリーンな終了時に、終了コードとして0が提供されます。

SpringはシャットダウンフックをJVMに登録して、終了時にApplicationContext が正常に閉じるようにします。 それに加えて、Springはインターフェースorg.springframework.boot.ExitCodeGeneratorも提供します。 このインターフェースは、System.exit() isが呼び出されたときに特定のコードを返すことができます。

3. 実装終了コード

ブートには、終了コードを操作できる3つの方法があります。

ExitCodeGeneratorインターフェースとExitCodeExceptionMapperを使用すると、カスタム終了コードを指定できますが、ExitCodeEventを使用すると、終了時に終了コードを読み取ることができます。

3.1. ExitCodeGenerator 

ExitCodeGeneratorインターフェース.を実装するクラスを作成しましょう。整数値を返すメソッドgetExitCode()を実装する必要があります。

@SpringBootApplication
public class DemoApplication implements ExitCodeGenerator {

    public static void main(String[] args) {
        System.exit(SpringApplication
          .exit(SpringApplication.run(DemoApplication.class, args)));
    }

    @Override
    public int getExitCode() {
        return 42;
    }
}

ここで、DemoApplicationクラスはExitCodeGenerator interface. Also、we wrapped the call to SpringApplication.run() with *SpringApplication.exit()*. を実装します

終了時、終了コードは42になります。

3.2. ExitCodeExceptionMapper

それでは、return an exit code based on a runtime exceptionを実行する方法を見てみましょう。 このために、常にNumberFormatExceptionをスローするCommandLineRunner を実装してから、タイプExitCodeExceptionMapperのBeanを登録します。

@Bean
CommandLineRunner createException() {
    return args -> Integer.parseInt("test") ;
}

@Bean
ExitCodeExceptionMapper exitCodeToexceptionMapper() {
    return exception -> {
        // set exit code base on the exception type
        if (exception.getCause() instanceof NumberFormatException) {
            return 80;
        }
        return 1;
    };
}

ExitCodeExceptionMapper, 内で、例外を特定の終了コードにマップするだけです。

3.3. ExitCodeEvent

次に、ExitCodeEventをキャプチャして、アプリケーションの終了コードを読み取りますこのために、この例ではregister an event listener which subscribes to*ExitCodeEvents* (namedDemoListener ):

@Bean
DemoListener demoListenerBean() {
    return new DemoListener();
}

private static class DemoListener {
    @EventListener
    public void exitEvent(ExitCodeEvent event) {
        System.out.println("Exit code: " + event.getExitCode());
    }
}

これで、アプリケーションが終了すると、メソッドexitEvent()が呼び出され、イベントから終了コードを読み取ることができます。

4. 結論

この記事では、終了コードを処理するためにSpringBootが提供する複数のオプションについて説明しました。

アプリケーションが終了するときに正しいエラーコードを返すことは非常に重要です。 終了コードは、終了が発生したときのアプリケーションの状態を決定します。 それに加えて、トラブルシューティングにも役立ちます。

コードサンプルはover on GitHubにあります。