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つのデータソースを使用してデータベースを切り替える方法についてのアイデア/考えはありますか?
これを行うには、SpringのAbstractRoutingDataSource
を拡張し、既存のデータソースをラップします。詳細は この記事 を確認してください。記事からの引用:
一般的な考え方は、ルーティングデータソースが仲介者として機能することです。一方、「実際の」データソースは、ルックアップキーに基づいて実行時に動的に決定できます。
SOに関する同様の質問も参照してください。
これを行うには多くの方法があります。たとえば、サービスクラスDatasourceSelectorService
を作成し、いくつかの入力(例:構成ファイル/ユーザー入力)に基づいて、それに応じてdatasource's
Beanを選択できます。
datasource
を必要とする他のすべてのクラスは、このDatasourceSelectorServiceを介して取得する必要があります。