【问题标题】:spring 2.5 hibernate mysql - two databases transactionspring 2.5 hibernate mysql - 两个数据库事务
【发布时间】:2012-08-29 02:01:07
【问题描述】:

我的应用程序是一个连接到 mysql 数据库(数据库名称=mydb)的 spring 2.5 Hibernate 应用程序。该应用程序托管在 Tomcat 6 上 - 在 java 6 上运行。我有一个用例,管理员可以编辑用户的配置文件。我计划将这些编辑的历史记录存储在一个单独的数据库中(在同一个 mysql 服务器上 - 数据库 namne=archivedb)。在这种情况下,编辑用户功能跨越同一个 mysql 数据库中的两个数据库。我需要使用 JTA 事务吗? IF JTA,哪个实现是最好的。我更喜欢开源的。

桑托什

【问题讨论】:

    标签: mysql spring hibernate transactions


    【解决方案1】:

    在 springsource 上有一个很好的article 关于这个。但是请注意,它适用于 Spring 3.0(因为示例使用基于 java 的配置),但您很可能将其转换为 Spring 2.5 的基于注释/xml 的设置。

    这里的关键是您使用 Spring 的 JtaTransactionManager 委托给嵌入式 XA 事务管理器。本文使用 Atomikos,它是一种开源嵌入式 XA 事务管理器(请参阅“使用嵌入式事务管理器”部分)。

    如您所见,它并没有那么复杂,Spring 为您做了很多抽象。但是,它对您的解决方案造成了相当大的复杂性,因此我将对您的架构进行另一次迭代,并评估分布式 (XA) 事务支持的好处是否值得您引入额外的复杂性。也许您真的不需要针对这个用例的完整 XA/两阶段提交事务?

    【讨论】:

    • Pap,感谢您的快速回答。我同意您的看法,无论我们是否需要这种复杂性来实现这样的功能。 “所以我会对你的架构进行另一次迭代并评估” - 你有更好的选择吗?
    • @santhosh 评估写入历史是否足够重要以至于它必须在同一个事务中发生,或者历史是否可以在它自己的事务范围内写入,在第一次编辑成功提交后.也许数据不一致的小风险是降低复杂性的可接受的权衡。或者,将历史数据存储在同一数据库中。这样你就完全摆脱了这个问题。你不需要为了复杂而创造复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2016-08-16
    • 2019-04-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多