Codes de sortie de démarrage de printemps

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.