SpringBootの終了コード
1. 概要
すべてのアプリケーションは、終了時に終了コードを返します。 このコードは、負の値を含む任意の整数値にすることができます。
このクイックチュートリアルでは、Spring Bootアプリケーションから終了コードを返す方法を説明します。
2. Springのブートおよび終了コード
起動時に例外が発生した場合、SpringBootアプリケーションはコード1で終了します。 それ以外の場合、クリーンな終了時に、終了コードとして0が提供されます。
SpringはシャットダウンフックをJVMに登録して、ApplicationContextが終了時に正常に閉じるようにします。 それに加えて、Springはインターフェースorg.springframework.boot.ExitCodeGeneratorも提供します。 このインターフェイスは、 System.exit()が呼び出されたときに特定のコードを返すことができます。
3. 終了コードの実装
Spring Bootには、終了コードを操作できる4つのメソッドがあります。
ExitCodeGeneratorインターフェイスとExitCodeExceptionMapperを使用すると、カスタムの終了コードを指定できます。 ExitCodeEvent を使用すると、終了時に終了コードを読み取ることができます。 さらに、例外によってExitCodeGeneratorインターフェイスを実装することも可能です。
3.1. ExitCodeGenerator
を実装するクラスを作成しましょう ExitCodeGenerator インターフェース
@SpringBootApplication
public class ExitCodeGeneratorDemoApplication implements ExitCodeGenerator {
public static void main(String[] args) {
System.exit(SpringApplication
.exit(SpringApplication.run(DemoApplication.class, args)));
}
@Override
public int getExitCode() {
return 42;
}
}
ここで、ExitCodeGeneratorDemoApplicationクラスはExitCodeGeneratorインターフェースを実装します。 また、 SpringApplication.run()の呼び出しを次のようにラップしました
終了時に、終了コードは42になります。
3.2. ExitCodeExceptionMapper
次に、実行時例外に基づいて終了コードを返す方法を見てみましょう。 このために、 CommandLineRunner を実装します。これは、常に NumberFormatException をスローし、タイプExitCodeExceptionMapperのBeanを登録します。
@Bean
CommandLineRunner createException() {
return args -> Integer.parseInt("test") ;
}
@Bean
ExitCodeExceptionMapper exitCodeToexceptionMapper() {
return exception -> {
// set exit code based on the exception type
if (exception.getCause() instanceof NumberFormatException) {
return 80;
}
return 1;
};
}
ExitCodeExceptionMapper、内で、例外を特定の終了コードにマップするだけです。
3.3. ExitCodeEvent
次に、キャプチャします ExitCodeEvent アプリケーションの終了コードを読み取る
@Bean
DemoListener demoListenerBean() {
return new DemoListener();
}
private static class DemoListener {
@EventListener
public void exitEvent(ExitCodeEvent event) {
System.out.println("Exit code: " + event.getExitCode());
}
}
これで、アプリケーションが終了すると、メソッド exitEvent()が呼び出され、イベントから終了コードを読み取ることができます。
3.4. 終了コードの例外
例外は、ExitCodeGeneratorインターフェースを実装することもできます。 このような例外をスローすると、Spring Bootは、実装された getExitCode()メソッドによって提供される終了コードを返します。 例えば:
public class FailedToStartException extends RuntimeException implements ExitCodeGenerator {
@Override
public int getExitCode() {
return 42;
}
}
FailedToStartException のインスタンスをスローすると、SpringBootはこの例外をExitCodeGenerator として検出し、42を終了コードとして報告します。
4. 結論
この記事では、終了コードを操作するためにSpring Bootが提供する複数のオプションについて説明しました。
アプリケーションが終了するときに正しいエラーコードを返すことは非常に重要です。 終了コードは、終了が発生したときのアプリケーションの状態を判別します。 それに加えて、トラブルシューティングにも役立ちます。
コードサンプルは、GitHubのにあります。