多个数据库的事务管理使用Spring和Hibernate

我想出了一个Spring和Hibernate应用程序,它有Inserts / Update到它自己的系统数据库,它甚至必须插入/更新具有不同数据库类型的其他系统。

如何在使用不同的数据库执行Hibernate时实现事务管理。

-Bharat

假设您正在寻找涉及多个数据源的交易,我强烈建议您根据您的选项给出David Syer(spring领导)的这一系列post:

http://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring–with-and-without-xa.html

例如,某些数据库甚至在某些情况下支持跨数据库模式的事务,而没有分布式事务(参见此处 )。

除了XA两阶段提交事务管理器之外还有其他选项(因为它们引入了显着的开销和复杂性),但它们涉及不同的权衡。

您可以指定两个单独的事务管理器。

        

设置完成后,您可以使用限定符来指定事务管理器:

  public class TransactionalService { @Transactional("account") public void setSomethingInAccount() { ... } @Transactional("businessData") public void doSomethingInBusinessData() { ... } } 

这需要由运行应用程序的容器(例如JBoss App Server)完成,或者您需要连接到其他事务管理器(如Bitronix)。 在JavaSE应用程序中开箱即用,您只能在管理多个数据源之间的事务时获得“尽力而为”的尝试。

您需要使用XA驱动程序定义与两个数据库的连接,然后确保您的事务管理器正在利用两阶段提交。

如果您不熟悉全局事务,请从这里开始: http : //docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html#transaction-global