2016-07-24 2 views
1

У меня есть веб-приложение Spring. Когда контекст приложения запущен, я использую ApplicationListener<ContextRefreshedEvent> для выполнения некоторой инициализации приложения, в частности, я загружаю данные из веб-службы. Если эта веб-служба недоступна, то мое приложение не может ничего использовать, и нет смысла держать его в рабочем состоянии. Есть ли способ программно отключить контекст приложения?Spring Web Application: Отключение при завершении инициализации

Я попытался сделать следующее:

if (contextRefreshedEvent instanceof ConfigurableApplicationContext) 
{ 
    ConfigurableApplicationContext configurableApplicationContext 
      = (ConfigurableApplicationContext) contextRefreshedEvent; 
    configurableApplicationContext.close(); 
} 

Однако, а не закрывая грациозно, который производит следующее исключение:

java.lang.IllegalStateException: BeanFactory не инициализирован или уже закрыты - вызов «Обновить 'перед доступом к бобам через ApplicationContext

Итак, что является правильным способом отключения приложения в такой ситуации?

+0

вы можете установить некоторую запланированную операцию, чтобы проверить, работает ли служба, и ждать, пока она не появится. Но закрытие приложения за счет исключения при запуске в порядке. В качестве альтернативы вы можете просто поймать исключение и запустить system.exit (0) с ведением журнала, если он указан в каком-то списке исключений или исключений из списка, иначе – Sarief

+0

Вызов 'System.exit' - довольно плохая идея, как будто вам не повезло, убейте ваш сервер, который вряд ли вы хотите. Просто введите исключение, которое в основном останавливает запуск приложения. –

+0

Мне известно о возможности использования 'System.exit', но я согласен с @ M.Deinum в том, что это не очень хорошая идея. Нет ли чистого способа сделать это, чтобы избежать исключения? – lanoxx

ответ

0

Бросьте ApplicationContextException. Это сработало для меня с Spring 4.2.7.RELEASE

Смежные вопросы