2016-07-04 3 views
1

Spring JdbcDaoSupportを使用して、複数の異なるデータベースを1つのプロジェクトに実装する最良の方法はどれですか?Springで異なるデータベースを使用するjdbcDaoSupport

データソースと構文が異なる複数のDBがあります。MySQL & Postgresなどです。純粋なjava-jdbcプロジェクトでは、ファクトリメソッドと抽象ファクトリのパターンと、データベース間の切り替え用に共通のDAOインターフェイスを持つ複数のDAOimplクラス(各DBに1つ)を使用しました。今私はSpring-jdbcを使用し、同様の動作を実装したい。

答えて

0

私は2年前に同じ問題に直面し、最終的に「春のカスタムスコープ」(http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes-custom)に基づいて実装を選択しました。

スプリングフレームワークでは、同じBean定義の複数のインスタンスを共存させることができます。それらは、いくつかのコンテキスト設定としか異なる。
例えば、このBeanの定義は、「ドメイン」と呼ばれるカスタムスコープを作成する場合

<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>

は、あなたがに基づいていくつかのデータソースをインスタンス化することができるようになります現在処理HTTPリクエストに応じて様々なLoginActionのBeanを作成します。同じBean定義。
JndiObjectFactoryBeanに基づくデータソースBean定義は、サーブレットコンテナが(web.xmlファイルを介して)データベース接続を管理できるようにします。ただし、Springプロパティを使用してデータソース名を変更する必要があります。
データベーストランザクションマネージャーのようなBeansにも、このスコープでマークする必要があります。

次に、HTTPリクエストが実行されるたびに有効範囲を有効にする必要があります。データソース名をリクエストURLのプレフィックスとして定義することをお勧めします。

ほとんどのWebフレームワークでは、HTTP要求をインターセプトできるため、要求を処理する前に予期したデータソースを取得できます。
次に、作成(または再利用)、選択したデータソースに固有の豆のセットと、ThreadLocal変数内に格納(カスタムスコープの実装がに依存すること)

この実装は、一見少し複雑になりますその使用法は透過的に見えます。

関連する問題