如何使用一个DataSource以编程方式更改Spring中的数据库?

Car*_*los 11 java spring datasource jdbc

我想看看在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>
Run Code Online (Sandbox Code Playgroud)

我将它们绑定到各自的bean但是我正在查看我的遗留代码,并且使用2个单独的bean实现它将非常尴尬.有关如何在需要时使用一个DataSource和切换数据库的想法/想法吗?

Abh*_*kar 13

您可以通过扩展Sp​​ring AbstractRoutingDataSource并将现有数据源包装在其中来实现此目的.查看此文章了解详细信息.引用文章:

一般的想法是路由DataSource充当中介 - 而'真实'DataSource可以在运行时基于查找键动态确定.

另请参阅关于SO的类似问题:

  1. 使用AbstractRoutingDataSource动态更改数据库架构/目录
  2. 从具有相同持久性单元的多个Db读取?
  3. 如何使用JDBC在spring中创建动态连接(数据源)