У меня есть веб-приложение с файлом конфигурации Spring.У меня есть следующая запись:
<bean id="flyway" class="xxx.FlywayTool" init-method="migrateOrFail"/>
Bean-компонент «flyway» используется для инициализации и миграции базы данных. Теперь у меня есть еще один bean-компонент, определяющий источник данных, который приложение должно использовать:
<bean id="dataSource" class="..." depends-on="flyway">
это зависит от пролетного пути, чтобы преуспеть.
Все работает нормально.Теперь, когда bean-компонент «flyway» выдает исключение, начальная загрузка пружины прекращается и запуск веб-приложения завершается - все хорошо.
Теперь я начинаю включать автопроводку для определенных компонентов с помощью:
<context:component-scan base-package="de.xxxxx.xxxxx" />
в некоторых классах я использую сервисы, которые также определены как bean-компоненты в конфигурации xml.и они, в свою очередь, зависят от источника данных, упомянутого выше.
теперь проблема: как только я запускаю приложение сейчас, и "flyway" выдает исключение, исключение проглатывается пружиной в следующем разделе:
org.springframework.beans.factory.support.AbstractBeanFactory.getTypeForFactoryBean (String, RootBeanDefinition)
catch (BeanCreationException ex) {
// Can only happen when getting a FactoryBean.
if (logger.isDebugEnabled()) {
logger.debug("Ignoring bean creation exception on FactoryBean type check: " + ex);
}
onSuppressedException(ex);
return null;
}
и теперь пытается весна для каждого другого зависимого сервиса (который зависитна источнике данных и, следовательно, на пути прохождения), инициализируйте все bean-компоненты, которые, в свою очередь, снова и снова приводят к одной и той же процедуре.
Этот исключительный цикл продолжается до тех пор, пока не закончится пружина, пытаясь создать все возможные зависимости вместо прерывания после первого прохождения.ошибка.
Это странное поведение начинается, только когда я включаю компонентное сканирование через
<context:component-scan ....
, когда эта функция отключена, пружина останавливается после первой ошибки пролетного пути.Он также заканчивается в другом классе:
org.springframework.context.support.AbstractApplicationContext.refresh ()
catch (BeansException ex) {
// Destroy already created singletons to avoid dangling resources.
destroyBeans();
// Reset 'active' flag.
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
, поэтому я ожидал бы такого поведенияи в другом случае.
в нашей весенней версии: 3.0.6.RELEASE
это поведение также присутствует в других классах, которые выдают любое выполнение во время выполнения (не только flyway)это ошибка или ожидаемое поведение?
любая помощь высоко ценится
marcel