我希望看到在Spring中使用一个DataSources的最佳方法是什么,但能够从Java代码中切换数据库?下面是我的两个DataSource,它们转到相同的数据库服务器但是不同的数据库。
<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来实现它是非常尴尬的。关于如何在需要时使用一个DataSource和切换数据库时是否有任何想法/想法?
答案 0 :(得分:12)
您可以通过扩展Spring AbstractRoutingDataSource
并将现有数据源包装在其中来实现此目的。有关详细信息,请查看this article。引用文章:
一般的想法是路由DataSource充当中介 - 可以在运行时动态确定“真正的”数据源 基于查找键。
另见SO上的类似问题:
答案 1 :(得分:0)
有很多方法可以做到这一点。例如,您可以创建服务类DatasourceSelectorService
,并根据某些输入(例如:配置文件/用户输入),相应地选择datasource's
bean。
所有其他需要datasource
的类都应该通过此DatasourceSelectorService获取它。