Коды весенней загрузки

Коды весенней загрузки

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.