Codes de sortie de démarrage de printemps
1. Vue d'ensemble
Chaque application renvoie un code de sortie à la sortie. Ce code peut être n'importe quelle valeur entière, y compris les valeurs négatives.
Dans ce rapide tutoriel, nous allons découvrir comment nous pouvons renvoyer des codes de sortie à partir d'une application Spring Boot.
2. Codes de démarrage et de sortie du printemps
Une application Spring Boot se fermera avec le code1 si une exception se produit au démarrage. Sinon, sur une sortie propre, il fournit0 comme code de sortie.
Spring enregistre les hooks d'arrêt avec la JVM pour s'assurer queApplicationContext se ferme correctement à la sortie. En plus de cela, Spring fournit également l'interfaceorg.springframework.boot.ExitCodeGenerator. Cette interface peut renvoyer le code spécifique lorsqueSystem.exit() est appelé.
3. Implémentation des codes de sortie
Boot fournit trois méthodes qui nous permettent de travailler avec des codes de sortie.
L'interfaceExitCodeGenerator et lesExitCodeExceptionMapper nous permettent de spécifier des codes de sortie personnalisés tandis que lesExitCodeEvent nous permettent de lire le code de sortie à la sortie.
3.1. ExitCodeGenerator
Créons une classe qui implémente l'interfaceExitCodeGenerator. Nous devons implémenter la méthodegetExitCode() qui renvoie une valeur entière:
@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;
}
}
Ici, la classeDemoApplication implémente lesExitCodeGenerator interface. Aussi,we wrapped the call to SpringApplication.run() with *SpringApplication.exit()*.
À la sortie, le code de sortie sera maintenant 42.
3.2. ExitCodeExceptionMapper
Voyons maintenant comment nous pouvonsreturn an exit code based on a runtime exception. Pour cela, nous implémentons unCommandLineRunner w qui lance toujours unNumberFormatException puis enregistre un bean de typeExitCodeExceptionMapper:
@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;
};
}
Dans lesExitCodeExceptionMapper, , nous mappons simplement l'exception à un certain code de sortie.
3.3. ExitCodeEvent
Ensuite, nous allons capturer unExitCodeEvent pour lire le code de sortie de notre application. Pour cela, nous avons simplementregister an event listener which subscribes to*ExitCodeEvents* (namedDemoListener dans cet exemple):
@Bean
DemoListener demoListenerBean() {
return new DemoListener();
}
private static class DemoListener {
@EventListener
public void exitEvent(ExitCodeEvent event) {
System.out.println("Exit code: " + event.getExitCode());
}
}
Désormais, lorsque l'application se termine, la méthodeexitEvent() sera appelée et nous pouvons lire le code de sortie de l'événement.
4. Conclusion
Dans cet article, nous avons examiné plusieurs options fournies par Spring Boot pour travailler avec les codes de sortie.
Il est très important pour toute application de renvoyer le bon code d’erreur en quittant. Le code de sortie détermine l'état de l'application lorsque la sortie s'est produite. En plus de cela, cela aide au dépannage.
Des exemples de code peuvent être trouvésover on GitHub.