Códigos de saída do Boot Spring
1. Visão geral
Todo aplicativo retorna um código de saída na saída; esse código pode ser qualquer valor inteiro, incluindo valores negativos.
Neste tutorial rápido, vamos descobrir como podemos retornar códigos de saída de um aplicativo Spring Boot.
2. Códigos de inicialização e saída de primavera
Um aplicativo Spring Boot será encerrado com o código1 se ocorrer uma exceção na inicialização. Caso contrário, em uma saída limpa, ele fornece0 como o código de saída.
O Spring registra ganchos de desligamento com a JVM para garantir que oApplicationContext clos funcione normalmente na saída. Além disso, o Spring também fornece a interfaceorg.springframework.boot.ExitCodeGenerator. Esta interface pode retornar o código específico quandoSystem.exit() é chamado.
3. Implementando códigos de saída
A inicialização fornece três métodos que nos permitem trabalhar com códigos de saída.
A interfaceExitCodeGenerator eExitCodeExceptionMapper nos permitem especificar códigos de saída personalizados, enquantoExitCodeEvent nos permite ler o código de saída na saída.
3.1. ExitCodeGenerator
Vamos criar uma classe que implemente a interfaceExitCodeGenerator.. Temos que implementar o métodogetExitCode() que retorna um valor inteiro:
@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;
}
}
Aqui, a classeDemoApplication implementa oExitCodeGenerator interface. Also,we wrapped the call to SpringApplication.run() with *SpringApplication.exit()*.
Na saída, o código de saída será agora 42.
3.2. ExitCodeExceptionMapper
Agora vamos descobrir como podemosreturn an exit code based on a runtime exception. Para isso, implementamos umCommandLineRunner que sempre lança umNumberFormatExceptione, em seguida, registramos um bean do tipoExitCodeExceptionMapper:
@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;
};
}
Dentro deExitCodeExceptionMapper, , simplesmente mapeamos a exceção para um determinado código de saída.
3.3. ExitCodeEvent
A seguir, capturaremos umExitCodeEvent para ler o código de saída de nosso aplicativo. Para isso, simplesmenteregister an event listener which subscribes to*ExitCodeEvents* (capturamosDemoListener neste exemplo):
@Bean
DemoListener demoListenerBean() {
return new DemoListener();
}
private static class DemoListener {
@EventListener
public void exitEvent(ExitCodeEvent event) {
System.out.println("Exit code: " + event.getExitCode());
}
}
Agora, quando o aplicativo sair, o métodoexitEvent() será chamado e podemos ler o código de saída do evento.
4. Conclusão
Neste artigo, examinamos várias opções fornecidas pelo Spring Boot para trabalhar com códigos de saída.
É muito importante para qualquer aplicativo retornar o código de erro correto ao sair. O código de saída determina o estado do aplicativo quando a saída aconteceu. Além disso, ajuda na solução de problemas.
As amostras de código podem ser encontradasover on GitHub.