2016-04-22 169 views
2

我想出了一个Spring & Hibernate应用程序,它在其自己的系统数据库中插入/更新,它甚至需要插入/更新具有不同数据库类型的其他系统。多个数据库的事务管理使用Spring&Hibernate

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

-Bharat

回答

0

这将需要由容器在您的应用程序运行(例如JBoss的应用服务器),或者你需要挂接到一些其他的事务管理器,如Bitronix来完成。在JavaSE应用程序中开箱即用,您只会尝试管理多个数据源之间的事务。

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

如果你不熟悉的全球交易,从这里开始:http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html#transaction-global

+0

注意:如果您没有同时涉及两个数据库的事务,Dinesh的回答就足够了 –

+0

感谢您的回复,对于我的要求,我不想与任何服务器一起使用,我想制作独立应用程序。 – Bharat

1

您可以指定两个独立TXN经理。

<bean id="transactionManager1" 
    class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory1" /> 
    <qualifier value="account"/> 
</bean> 

<bean id="transactionManager2" 
    class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory2" /> 
    <qualifier value="businessData"/> 
</bean> 

一旦设立完成后,你可以使用qualigier指定TXN经理:

​​
1

假设你正在寻找涉及多个数据源的交易,我强烈建议你把这个系列文章的由David Syer(春季铅)对您的选择:

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

例如,有些数据库甚至支持跨DAT交易在没有分布式事务的情况下在特定情况下降低模式(请参阅here)。

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

相关问题