11

Springで1つのデータソースを使用するための最良の方法を探していますが、Javaコード内からデータベースを切り替えることができますか?以下は私の2つのデータソースで、同じデータベースサーバーにアクセスしますが、データベースは異なります。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDataSource" />
    <property name="url"
              value="jdbc:sybase:Tds:10.20.30.40:50/DATABASE_EMS" />
    <property name="username" value="userid" />
    <property name="password" value="derp" />
</bean>

<bean id="dataSourceMain" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDataSource" />
    <property name="url"
              value="jdbc:sybase:Tds:10.20.30.40:50/DATABASE" />
    <property name="username" value="userid" />
    <property name="password" value="derp" />
</bean>

私はそれらをそれぞれのBeanにバインドしていますが、レガシーコードを調べているので、2つの別々のBeanでこれを実装するのは非常に厄介です。必要なときに1つのデータソースを使用してデータベースを切り替える方法についてのアイデア/考えはありますか?

4

2 に答える 2

14

これを行うには、Springを拡張し、AbstractRoutingDataSource既存のデータソースをSpringでラップします。詳細については、この記事を確認してください。記事からの引用:

一般的な考え方は、ルーティングデータソースが仲介者として機能することです。一方、「実際の」データソースは、ルックアップキーに基づいて実行時に動的に決定できます。

SOに関する同様の質問も参照してください。

  1. AbstractRoutingDataSourceを使用してデータベーススキーマ/カタログを動的に変更する
  2. 同じ永続性ユニットを持つ複数のDbから読み取りますか?
  3. JDBCを使用してSpringで動的接続(データソース)を作成する方法
于 2013-01-15T03:50:30.340 に答える
0

これを行うには多くの方法があります。たとえば、サービスクラスを作成し、DatasourceSelectorServiceいくつかの入力(たとえば、構成ファイル/ユーザー入力)に基づいて、datasource'sそれに応じてBeanを選択できます。

を必要とする他のすべてのクラスは、datasourceこのDatasourceSelectorServiceを介して取得する必要があります。

于 2013-01-15T03:44:12.933 に答える