首页 > 其他 > 详细

多数据源事务控制

时间:2021-01-25 14:14:11      阅读:65      评论:0      收藏:0      [点我收藏+]

多数据源事务控制

背景

最近遇到了一个多数据源事务的同步问题,业务模型很简单,就是读取A数据库的数据,然后根据一定的映射规则插入到B数据库中,但是要保证从A数据库同步的数据到B数据库的数据和A完全一样。这样就需要有事务的控制。但是Spring的声明式事务只能控制单个数据库的事务问题,而由于系统中这块的内容比较少,又不想引入注入MQ和分布式事务的组件,所以选择了使用Spring的编程式事务手动控制事务的问题。

Spring利用PlatformTransactionManager控制事

 技术分享图片 

事务控制步骤

1:首先配置两个事务管理器transactionManager1,transactionManager2

2:把事务管理器注入大两个变量中

3:统一手动控制事务

代码控制的逻辑如下:

@Resource
@Qualifier("transactionManager1")
private PlatformTransactionManager txManager1;
@Qualifier("transactionManager2")
@Resource
private PlatformTransactionManager txManager2;

 

DefaultTransactionDefinition def1 = new DefaultTransactionDefinition(); 
// explicitly setting the transaction name is something that can be done only programmatically 

def1.setName("SomeTxName"); 
def1.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status1 = txManager1.getTransaction(def1);


DefaultTransactionDefinition def2 = new DefaultTransactionDefinition(); 
// explicitly setting the transaction name is something that can be done only programmatically 

def2.setName("SomeTxName"); 
def2.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status2 = txManager2.getTransaction(def2);


//统一进行事务控制
try {
    // put your business logic here
    executeDataSource1(txManager1,otherParams);
    executeDataSource2(txManager2,otherParams);
}
catch (MyException ex) {
    txManager1.rollback(status1);
    txManager2.rollback(status2);
    throw ex;
}
txManager1.commit(status1);
txManager2.commit(status2);

总结

其实这和利用Spring的声明式事务是一样的,只不过他们各有利弊,编程式事务灵活,和比较精确的控制事务的每一个部分,但是代码量可能多一点,而声明式事务一个注解就可以完成,事务也可以比较精确的控制,但是声明式事务控制的最小范围是一个方法体,而遇到多个诸如事务的同时控制的时候就显得有点力不从心了。

参考链接:

https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#tx-multiple-tx-mgrs-with-attransactional

 

 

多数据源事务控制

原文:https://www.cnblogs.com/wkynf/p/14324455.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!