В этой статье мы проверим, как работает код выхода Spring Boot и как создать свои собственные коды выхода.
Когда вы запускали приложение весенней загрузки, в ваших журналах несколько раз вы видели такие журналы, как «Процесс завершен, код выхода 0»
Возможно, вы заметили, а иногда и не заметили, но вышеприведенное сообщение относится к успешному сценарию или счастливому сценарию, тогда как в случае неудачи вы знаете что-то вроде '…exit code -1'. Это сообщение об ошибке, которое вы, возможно, сможете собрать, не уделяло этому особого внимания, но я знаю, что с этим сталкивались все разработчики Spring.
Давайте начнем с нашего любимого веб-сайта start.spring.io и создадим один простой проект, чтобы продемонстрировать функцию кода выхода.
Сгенерируйте проект и откройте его в любой из ваших IDE.
Каждое весеннее приложение возвращает код выхода при выходе. Этот код может быть любым целым числом.
Приложение Spring Boot завершается с кодом 1, если при запуске возникает исключение или при чистом выходе, оно возвращает 0 в качестве кода выхода при выходе.
Приложение Spring boot регистрирует перехватчики завершения работы в JVM, чтобы обеспечить корректное закрытие ApplicationContext при выходе.
Spring предоставляет функциональный интерфейс org.springframework.boot.ExitCodeGenerator. Этот интерфейс может возвращать определенный код при вызове SpringApplication.exit(), а затем этот код выхода может быть передан в System.exit(). .
Если вы запустите любое простое загрузочное приложение Spring при успешном выходе, оно покажет код выхода 0.
Реализация генератора кода выхода: –
Давайте реализуем код выхода, реализовав интерфейс ExitCodeGenerator.
@SpringBootApplication public class CustomexitcodeApplication implements ExitCodeGenerator{ public static void main(String[] args) { System.exit(SpringApplication.exit(SpringApplication.run(CustomexitcodeApplication.class, args))); } @Override public int getExitCode() { return 21; } }
или иначе
@SpringBootApplication public class CustomexitcodeApplication { public static void main(String[] args) { System.exit(SpringApplication.exit(SpringApplication.run(CustomexitcodeApplication.class, args))); } @Bean public ExitCodeGenerator exitCodeGenerator() { return () -> 21; } }
Приведенный выше код вернет пользовательский код выхода при выходе. Как сопоставить коды выхода с исключением.
ExitCodeExceptionMapper:-
Если вы хотите возвращать коды выхода на основе какого-либо исключения во время выполнения, вам необходимо реализовать ExitCodeExceptionMapper, этот интерфейс поможет нам сопоставить коды выхода с определенными исключениями.
Здесь в ExitCodeExceptionMapper мы просто сопоставляем исключение с определенным целочисленным кодом выхода.
@Bean CommandLineRunner createException() { return args -> Integer.parseInt("invalid") ; } // ExitCodeExceptionMapper to map exit code to exception @Bean ExitCodeExceptionMapper exitCodeToexceptionMapper() { return exception -> { if (exception.getCause() instanceof NumberFormatException) return -4; if (exception.getCause() instanceof ArrayIndexOutOfBoundsException) return -5; return 1; }; }
Мы используем CommandLineRunner для создания исключения.
На данный момент мы узнали две вещи, что такое существующий код: как вернуть его вместе с сопоставлением исключений, но код выхода не имеет смысла до тех пор, пока мы не дадим осмысленное сообщение, обрабатывая коды выхода.
ExitCodeEvent:-
Прослушиватель ExitCodeEvent будет прослушивать код выхода и действовать в соответствии с ним. Аннотируйте метод с помощью @EventListener.
@Bean ExitCodeListener exitCodeListenerBean() { return new ExitCodeListener(); } private static class ExitCodeListener { @EventListener public void exitEvent(ExitCodeEvent event) { System.out.println("Application on Exit return the code: " + event.getExitCode()); }
Пользовательское исключение с кодом выхода:-
Вы можете реализовать генератор кода выхода вместе с классом исключений. скажем, вы хотите создать исключение и вернуть код выхода, когда недействительные пользователи пытаются получить доступ к вашей системе.
public class InValidUserException extends RuntimeException implements ExitCodeGenerator { @Override public int getExitCode() { return 24; } }
Вывод:-
В этой статье мы узнали, что такое код выхода для приложения весенней загрузки и как мы можем создать собственный код выхода вместе с сопоставлением исключений. В корпоративном приложении очень важно возвращать правильные исключения с кодами выхода.
https://medium.com/techwasti/spring-boot-firebase-crud-b0afab27b26e
https://medium.com/techwasti/spring-boot-cloud-native-buildpacks-and-layered-jars-bbe74f80e983
https://medium.com/techwasti/spring-boot-firebase-crud-b0afab27b26e
https://medium.com/@maheshwar.ligade/spring-tools-4-for-visual-studio-code-79dc21a8c88c
https://medium.com/techwasti/spring-data-neo4j-reactive-e3a7038891be
Давайте общаться в Stackoverflow, LinkedIn, Facebook и Twitter.