スプリングブート終了コード
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にあります。