1. Обзор
Каждое приложение возвращает код выхода при выходе; этот код может быть любым целочисленным значением, включая отрицательные значения.
В этом кратком руководстве мы узнаем, как мы можем возвращать коды выхода из приложения Spring Boot.
2. Коды загрузки и выхода пружины
Приложение Spring Boot завершит работу с кодом 1 если при запуске возникает исключение. В противном случае на чистом выходе он обеспечивает 0 в качестве кода выхода.
Spring регистрирует крючки завершения работы с JVM, чтобы гарантировать, что ApplicationContext изящно закрывается при выходе. В дополнение к этому Spring также предоставляет интерфейс org.springframework.boot.Генератор кода выхода . Этот интерфейс может возвращать определенный код при вызове System.exit () .
3. Реализация Кодов Выхода
Spring Boot предоставляет четыре метода, которые позволяют нам работать с кодами выхода.
Генератор кода выхода интерфейс и ExitCodeException Mapper позволяют нам указывать пользовательские коды выхода, в то время как ExitCodeEvent позволяет нам считывать код выхода при выходе. Более того, для исключений даже возможно реализовать интерфейс Генератор кода выхода .
3.1. ExitCodeGenerator
Давайте создадим класс, реализующий Генератор кода выхода интерфейс . Мы должны реализовать метод getExitCode () , который возвращает целочисленное значение:
@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; } }
Здесь демонстрационное приложение Exit Code Generator класса реализует интерфейс Exit Code Generator . Кроме того, мы завернули вызов в SpringApplication.run() с SpringApplication.exit() .
При выходе код выхода теперь будет 42.
3.2. Отображение исключений ExitCodeException
Теперь давайте выясним, как мы можем вернуть код выхода на основе исключения времени выполнения . Для этого мы реализуем CommandLineRunner , который всегда вызывает NumberFormatException , а затем регистрируем боб типа ExitCodeExceptionMapper :
@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; }; }
В картографе ExitCodeException мы просто сопоставляем исключение с определенным кодом выхода.
3.3. Событие Кода Выхода
Затем мы захватим событие Exit Code для чтения кода выхода нашего приложения . Для этого мы просто зарегистрируем прослушиватель событий, который подписывается на событие Exit Code s (с именем DemoListener в этом примере):
@Bean DemoListener demoListenerBean() { return new DemoListener(); } private static class DemoListener { @EventListener public void exitEvent(ExitCodeEvent event) { System.out.println("Exit code: " + event.getExitCode()); } }
Теперь, когда приложение завершит работу, будет вызван метод exit Event () , и мы сможем прочитать код выхода из события.
3.4. Исключение с кодом выхода
Исключение также может реализовать Генератор кода выхода интерфейс. При создании таких исключений Spring Boot возвращает код выхода, предоставленный реализованным методом getExitCode () . Например:
public class FailedToStartException extends RuntimeException implements ExitCodeGenerator { @Override public int getExitCode() { return 42; } }
Если мы создадим экземпляр Не удалось запустить исключение , Spring Boot обнаружит это исключение как генератор кода выхода и сообщит о 42 в качестве кода выхода.
4. Заключение
В этой статье мы рассмотрели несколько вариантов, предоставляемых Spring Boot для работы с кодами выхода.
Очень важно, чтобы любое приложение возвращало правильный код ошибки при выходе. Код выхода определяет состояние приложения, когда произошел выход. В дополнение к этому, это помогает в устранении неполадок.
Примеры кода можно найти на GitHub .