【问题标题】:TransactionManager for multiple databases多个数据库的事务管理器
【发布时间】:2014-07-23 02:59:59
【问题描述】:

我正在从事一个项目,该项目有几个(已经存在的)不同的数据库和一个新的数据库(我的“本地”数据库),它将仅用于这个新应用程序。

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

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

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

感谢并原谅我糟糕的英语!

【问题讨论】:

  • 如果您指定您使用的数据库技术可能会有所帮助。
  • 我认为他们都是甲骨文

标签: java spring hibernate jpa transactions


【解决方案1】:

RESOURCE_LOCAL

如果您只打算读取其他数据库,则可以使用本地事务。

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

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

Hibernate/JPA 事务管理器将使用底层 SessionFactoryDataSource 打开、提交和回滚事务。

JTA

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

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多