[英]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(春季主管)提供以下系列帖子:
例如,某些数据库甚至在某些情况下支持跨数据库模式的事务,而没有分布式事务(参见此处 )。
除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.