繁体   English   中英

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

[英]Transaction management for multiple database Using Spring & Hibernate

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

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

-Bharat

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

    <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() { ... }
}

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM