У меня есть веб-приложение Spring. Когда контекст приложения запущен, я использую ApplicationListener<ContextRefreshedEvent>
для выполнения некоторой инициализации приложения, в частности, я загружаю данные из веб-службы. Если эта веб-служба недоступна, то мое приложение не может ничего использовать, и нет смысла держать его в рабочем состоянии. Есть ли способ программно отключить контекст приложения?Spring Web Application: Отключение при завершении инициализации
Я попытался сделать следующее:
if (contextRefreshedEvent instanceof ConfigurableApplicationContext)
{
ConfigurableApplicationContext configurableApplicationContext
= (ConfigurableApplicationContext) contextRefreshedEvent;
configurableApplicationContext.close();
}
Однако, а не закрывая грациозно, который производит следующее исключение:
java.lang.IllegalStateException: BeanFactory не инициализирован или уже закрыты - вызов «Обновить 'перед доступом к бобам через ApplicationContext
Итак, что является правильным способом отключения приложения в такой ситуации?
вы можете установить некоторую запланированную операцию, чтобы проверить, работает ли служба, и ждать, пока она не появится. Но закрытие приложения за счет исключения при запуске в порядке. В качестве альтернативы вы можете просто поймать исключение и запустить system.exit (0) с ведением журнала, если он указан в каком-то списке исключений или исключений из списка, иначе – Sarief
Вызов 'System.exit' - довольно плохая идея, как будто вам не повезло, убейте ваш сервер, который вряд ли вы хотите. Просто введите исключение, которое в основном останавливает запуск приложения. –
Мне известно о возможности использования 'System.exit', но я согласен с @ M.Deinum в том, что это не очень хорошая идея. Нет ли чистого способа сделать это, чтобы избежать исключения? – lanoxx