В этой статье мы проверим, как работает код выхода 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

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.