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

问题描述 投票:11回答:2

我正在寻找在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来实现它非常尴尬。在需要时是否有关于如何使用一个数据源和切换数据库的想法/想法?

java spring jdbc datasource
2个回答
13
投票

您可以通过扩展Sp​​ring的AbstractRoutingDataSource并将现有的数据源包装在其中来实现。有关详细信息,请检查this article。引用文章:

一般的想法是,路由数据源充当中介–虽然可以在运行时动态确定“真实”数据源基于查找键。

也可以在SO上看到类似的问题:

  1. Using AbstractRoutingDataSource to dynamically change the database schema/catalog
  2. Reading from multiple Db's with same Persistence Unit?
  3. How to create Dynamic connections (datasource) in spring using JDBC

0
投票

您可以通过多种方式执行此操作。例如,您可以创建一个服务类DatasourceSelectorService,然后根据某些输入(例如:配置文件/用户输入),它相应地选择datasource's bean。

需要datasource的所有其他类都应通过此DatasourceSelectorService获取它。

© www.soinside.com 2019 - 2024. All rights reserved.