Отключить запуск Spring после BeanInstantiationException (Tomcat) - PullRequest
5 голосов
/ 03 сентября 2010

для проекта, над которым я сейчас работаю, есть требование отключить контекст веб-приложения, которое должно запускаться, когда Spring не может инициализировать некоторые bean-компоненты (которые вызывают веб-сервисы во время инициализации и, следовательно, могут привести к сбою).

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

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'latestAdsRepository' defined in file [...]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [...]: Constructor threw exception; nested exception is java.io.IOException: SHUT DOWN NOW!!
...
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [...]: Constructor threw exception; nested exception is java.io.IOException: SHUT DOWN NOW!!

однако контекст начинается, и все ссылки на bean-компонент, который не удалось запустить, являются null . Излишне говорить, что это вызывает различные плохие исключения Nullpointer повсеместно. Тем более, что этот компонент очень важен для веб-приложения.

Поэтому мне нужен способ явно сказать Spring, что это веб-приложение не запустилось, если бин не мог быть инициализирован. Однако System.exit (1) не подходит, поскольку на этом сервере Tomcat есть и другие веб-приложения.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Насколько я знаю, по умолчанию запуск контекста завершается неудачно, когда Spring не может создать экземпляр компонента, если исключение распространяется через слушатель запуска в контейнер сервлета.

Вы можете использовать аннотацию @Required, чтобы пометить определенную точку впрыска как обязательную.

0 голосов
/ 03 сентября 2010

Как вы загружаете контекст Spring?

Звучит так, как будто вы делаете это вручную (т.е. вы звоните new ApplicationContext() куда-то), вместо этого вам следует использовать ContextLoaderListener, чтобы ваш контекст автоматически загружался при запуске приложенияи выключение во время закрытия приложения).Исключения при запуске контекста Spring могут привести к сбою запуска контекста веб-приложения.

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