TransactionManager用于多个数据库

时间:2014-07-23 02:59:59

标签: java spring hibernate jpa transactions

我正在开发一个项目,该项目有几个(已经存在的)不同的数据库和一个新数据库(我的“本地”数据库),只能从这个新应用程序中使用。

从这个应用程序我将只阅读所有其他数据库,而不是执行任何更改。但对于本地数据库,我将在其中执行保存/更新/删除操作。

在这种情况下,我有一些服务,其中包括例如在我的本地数据库中保留一些实体,同时将查询外部“只读”数据库。那么,对于这种服务,我是否只能使用绑定到本地数据库的简单hibernate事务管理器?或者我是否需要为所有参与者进行一些jta交易,即使我只会在剩余的dbs中执行读取操作?

作为一个附带问题:假设我需要在所有资源之间进行事务处理,并且如果所有数据库都存在于同一服务器中,我还需要jta事务吗?

谢谢,并原谅我可怜的英语!

1 个答案:

答案 0 :(得分:4)

RESOURCE_LOCAL

如果您只打算阅读其他数据库,那么您可以使用本地交易。

在这种情况下,您需要配置所有DataSource,并且Hibernate或JPA事务管理器必须仅将您的本地数据库DataSource作为配置参数。

如果要将Hibernate用于其他数据源,则需要为计划查询的每个SessionFactory配置DataSource

Hibernate / JPA事务管理器将使用基础SessionFactory DataSource打开,提交和回滚事务。

JTA

如果您想要一个全局事务来更新多个数据源,那么您必须提供XA数据源,使用XA事务管理器和Spring JTA事务管理器外观。但是数据库不需要并置到单个服务器上。即使数据库位于不同的计算机上,JTA也能正常工作。