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