有没有一种简单的方法可以通过使用Spring和Hibernate从UI或属性文件中读取来选择数据源,如果是的话。数据源是X和Y.?
一种方法是使用sessionfactory,datasource和transaction manager的双重配置。然后,根据数据源的选择,DAO注入适当的sessionfactory。有更好的选择吗?
我的方案是,当客户端需要更改同一应用程序的数据库时,我应该能够动态切换两个数据库。
让DAO与DB兼容的方法是一个很好的方法,例如。从DB X检索数据的方法和从DB Y检索数据的另一种方法,因为数据检索因DB而异,并在运行时动态调用方法。
或
为了数据库与java的兼容性,为X和Y数据库共同拥有相同应用程序的不同版本是一种更好的方法吗?如果这是正确的方法,我想了解原因?
答案 0 :(得分:1)
除了Spring个人资料外,您还可以考虑Spring AbstractRoutingDataSource
一般的想法是路由DataSource充当中介 - 可以根据查找键在运行时动态确定“真正的”数据源。
您可以在此blog和更新的post中找到更多信息,并使用hibernate进行示例性使用。
AbstractRoutingDataSource易于使用,并且可以支持您需要根据某些参数动态切换数据库的场景。后面的文章为您提供了一个示例,其中根据用户选择的区域设置动态切换
答案 1 :(得分:1)
我已经成功使用了选项1:属性文件,人们甚至可以自己更改它。如果你设法让Dao接口的两个实现以相同的方式运行,那么我就没有理由去做两个不同的应用程序。
使用值config.dao.id
或daoOracle
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>