在Spring Hibernate中动态选择数据源 - 方法

时间:2015-06-17 17:32:30

标签: java spring hibernate spring-mvc

有没有一种简单的方法可以通过使用Spring和Hibernate从UI或属性文件中读取来选择数据源,如果是的话。数据源是X和Y.?

一种方法是使用sessionfactory,datasource和transaction manager的双重配置。然后,根据数据源的选择,DAO注入适当的sessionfactory。有更好的选择吗?

我的方案是,当客户端需要更改同一应用程序的数据库时,我应该能够动态切换两个数据库。

让DAO与DB兼容的方法是一个很好的方法,例如。从DB X检索数据的方法和从DB Y检索数据的另一种方法,因为数据检索因DB而异,并在运行时动态调用方法。

为了数据库与java的兼容性,为X和Y数据库共同拥有相同应用程序的不同版本是一种更好的方法吗?如果这是正确的方法,我想了解原因?

2 个答案:

答案 0 :(得分:1)

除了Spring个人资料外,您还可以考虑Spring AbstractRoutingDataSource

  

一般的想法是路由DataSource充当中介    - 可以根据查找键在运行时动态确定“真正的”数据源。

您可以在此blog和更新的post中找到更多信息,并使用hibernate进行示例性使用。

AbstractRoutingDataSource易于使用,并且可以支持您需要根据某些参数动态切换数据库的场景。后面的文章为您提供了一个示例,其中根据用户选择的区域设置动态切换

答案 1 :(得分:1)

我已经成功使用了选项1:属性文件,人们甚至可以自己更改它。如果你设法让Dao接口的两个实现以相同的方式运行,那么我就没有理由去做两个不同的应用程序。

使用值config.dao.iddaoOracle

定义daoMySql
<bean id='daoOracle' abstract='true' class='...'/>
<bean id='daoMySql' abstract='true' class='...'/>

<bean id='dao' parent='${config.dao.id}'/>

<bean id='myService' class='...'>
   <property name='dao' ref='dao'>
</bean>