多个数据库的事务管理使用Spring&过冬

时间:2016-04-22 20:33:24

标签: java spring hibernate

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

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

-Bharat

3 个答案:

答案 0 :(得分:1)

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

    <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>

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

    public class TransactionalService {

@Transactional("account")
public void setSomethingInAccount() { ... }

@Transactional("businessData")
public void doSomethingInBusinessData() { ... }
}

答案 1 :(得分:1)

假设您正在寻找涉及多个数据源的交易,我强烈建议您根据您的选择提供David Syer(春季主管)的这一系列帖子:

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

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

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

答案 2 :(得分:0)

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

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

如果您不熟悉全球交易,请从此处开始:http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html#transaction-global