私は、春の構成ファイルを持つWebアプリケーションを持っています。Beanの初期化時にSpringがブートストラップを中止しないコンポーネントのスキャンが有効なときにエラーが発生しましたか?
<bean id="flyway" class="xxx.FlywayTool" init-method="migrateOrFail"/>
私は、アプリケーションが使用するデータソースを定義する別のBeanを持つBeanがdatabase.Nowを初期化し、移行するために使用されている「フライウェイ」:
<bean id="dataSource" class="..." depends-on="flyway">
この1つは異なり、私は次のエントリを持っています飛行機で成功する。
すべて正常です。今、 "飛行経路" Beanが例外をスローすると、スプリングストップのブートストラッピングとwebappの起動が完了しました。
私も、XML構成で豆のように定義されているサービスに依存するクラスの一部で<context:component-scan base-package="de.xxxxx.xxxxx" />
:
今私は経由して特定のコンポーネントのためのオートワイヤリングを有効にし始めています。私は上記のデータソースに依存しています。今
問題は:
org.springframework.beans.factory.support:できるだけ早く私は今、アプリケーションをブートストラップし、「フライウェイ」として例外は、次のセクションでは、スプリングによって飲み込まれる例外をスローしています。 AbstractBeanFactory.getTypeForFactoryBean(文字列、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;
}
、今、他のすべてのdependendサービスのための春の試行は、(つまり、データソースに依存し、したがって、フライウェイ)、再びターン結果で同様の手順ですべての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
この動作はまた、任意のランタイムexecptionを投げ、他のクラスと存在しているが(ちょうどフライウェイではない)これはバグや予想される動作でありますか?
任意のヘルプ高く評価
マルセル
XMLファイルにBean宣言の後に '
うわー、それはうまくいくようです。あなたはバグを開くべきだと思う?またはこの意図された動作ですか? – Marcel
この機能を使用すると、アノテーション駆動型設定をXML設定で上書きできるため、意図した動作です。 –