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

时间:2019-01-18 12:09:15

标签: spring spring-boot spring-mvc spring-jdbc

我希望在Spring MVC 3.x版本中看到完整的示例代码,在Spring中使用一个DataSources却能够从Java代码中切换数据库的最佳方法是什么?下面是我的两个数据源,它们去到相同的数据库服务器,但是到不同的数据库。

<bean id="ds_hydhccj" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver"></property>
        <property name="url" value="jdbc:postgresql://localhost:5432/dbname"></property>
        <property name="username" value="postgres"></property>
        <property name="password" value="postgres"></property>
    </bean>

当我从前端选择要传递其url的dbname的下拉选项时,如何能够使用一个数据源并动态切换数据库?

2 个答案:

答案 0 :(得分:0)

首先,您需要获取应用程序上下文,在这种情况下,您可以通过两种方式来实现

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml")

@Autowired
private ApplicationContext ctx;

然后,您

DataSource dataSource = (DataSource) context.getBean("ds_hydhccj");

如果您使用的是hibernate之类的框架,建议您创建两个单独的实体管理器,以容纳两个不同的连接。

答案 1 :(得分:0)

AbstractRoutingDataSource应该是您的朋友。它允许在Spring ApplicationContext中设置一个单一的bean,并具有将其切换到n个实际数据源之一的机制。

您可以在其他SO question

中找到一个简单的示例