15

Spring MVC 2.5 と Hibernate を使用する Web アプリケーションに取り組んでいます。

アプリケーションの要件の 1 つは、一部のオブジェクトを外部データベースにエクスポートできる必要があることです。既存のデータレイヤーを使用して、オブジェクトを外部ソースに保存するだけでよいと思います。

私はSpringとHibernateが初めてで、これにどのようにアプローチすべきか疑問に思っているだけだと思います. 現在、すべてが注釈を通じて自動的に接続されています。新しい dataSource Bean、新しい sessionFactory、および transactionManager を作成する必要があると思います...多分...しかし...

  1. ユーザーが具体的に「エクスポート」している場合にのみ、外部データ ソースへの接続を利用できるようにしたいと考えています。

  2. オートワイヤリングは私の邪魔になりますか? エクスポート プロセスの DAO をインスタンス化するときに、Spring に適切な sessionFactory を注入するように指示するにはどうすればよいですか? (コンストラクターを介して自動配線しています) プログラムでセッション ファクトリ (など) を作成し、DAO を手動でインスタンス化する必要がありますか? もしそうなら、これはオートワイヤー注釈を「上書き」しますか?

誰かがこのようなものを機能させるための基本的なプロセスを順を追って説明できる場合は、特に上記の質問への回答は必要ないと思います。ありがとう!

4

2 に答える 2

25

幸いなことに、Spring にはすでにこれに対する解決策があります。AbstractRoutingDataSource です。基本的に複数の DataSource の Facade として機能し、それをサブクラス化し、使用する DataSource を決定するために必要なロジックを実装できます。詳細は次のとおりです。

http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/

これにより、DataSource ルックアップ ロジックを正確に 1 か所で処理できます。Hibernate SessionFactory に AbstractRoutingDataSource のサブクラスを挿入する必要があることを除いて、DAO レイヤーと SessionFactory を調整する必要はありません。

于 2009-05-15T05:51:06.550 に答える
8

Springコンテキストで複数のデータソースとセッションファクトリを構成すること自体は問題にはなりませんが、自動配線の魅力が低下します。

アノテーションを使用して、どちらを選択するかを自動配線に指示することもできますが、自動配線を使用せず、代わりにまたは@Qualifierを使用して正しいデータソースとセッションファクトリを明示的に挿入することをお勧めします。<property><constructor-arg>

両方のデータソースがアプリサーバーによって管理されている場合、トランザクションマネージャーは両方のデータソース間で共有される可能性がありますが、両方のデータソース間でトランザクションの整合性を保つことは要件ではなく、データソースごとに個別のトランザクションを行う必要があるようです。十分でしょう。

于 2009-05-14T10:15:34.600 に答える