Коды весенней загрузки
1. обзор
Каждое приложение возвращает код выхода при выходе; этот код может быть любым целочисленным значением, включая отрицательные значения.
В этом кратком руководстве мы узнаем, как вернуть коды выхода из приложения Spring Boot.
2. Весенние коды загрузки и выхода
Приложение Spring Boot завершится с кодом1, если при запуске возникнет исключение. В противном случае при чистом выходе он предоставляет0 в качестве кода выхода.
Spring регистрирует перехватчики завершения работы с JVM, чтобы гарантировать плавное закрытиеApplicationContext при выходе. В дополнение к этому Spring также предоставляет интерфейсorg.springframework.boot.ExitCodeGenerator. Этот интерфейс может возвращать конкретный код при вызовеSystem.exit() .
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. Для этого мы реализуемCommandLineRunner w, который всегда выдаетNumberFormatException, а затем регистрируем bean-компонент типаExitCodeExceptionMapper:
@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 in this example):
@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. Заключение
В этой статье мы рассмотрели несколько вариантов, предоставляемых Spring Boot для работы с кодами выхода.
Для любого приложения очень важно возвращать правильный код ошибки при выходе. Код выхода определяет состояние приложения, когда произошел выход. Кроме того, это помогает в устранении неполадок.
Примеры кода можно найтиover on GitHub.