Применение пружины отключения из ApplicationListener - PullRequest
0 голосов
/ 01 июля 2019

Можно ли закрыть контекст из ApplicationListener?

   public class MyListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
            // on some certain condition we want to shutdown spring ie close the context
        ((ConfigurableApplicationContext)event.getApplicationContext()).close();
        }
    }

Проблема в том, что Spring по-прежнему хочет завершить процесс запуска здесь:

public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
}

И поэтому выдает исключение IllegalStateException:

java.lang.IllegalStateException: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@dcb84c98 уже закрыт

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Вероятно, вопрос, который вы на самом деле хотели задать, звучит так: «Как прервать запуск Spring-Boot».

Бросить исключение из вашего onApplicationEvent метода.

0 голосов
/ 01 июля 2019

Кажется, вы хотите прервать Spring при запуске.

Простой, вы не сможете сделать это без получения ошибки.

Если вам все же захочется убить ваше приложение во время запуска, просто используйте:

System.exit(0);

Но еслиВы хотите закрыть контекст после первоначального прослушивания другого Spring event, называемого ApplicationReadyEvent

@Component
public class MyListener {

    @EventListener
    public void onApplicationEvent(ApplicationReadyEvent event) throws Exception {
        event.getApplicationContext().close();
    }
}

ApplicationReadyEvent - событие опубликовано настолько поздно, насколько это возможноуказать, что приложение * готово к обслуживанию запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...