方案一:使用编程式事务
第一步:注入事务管理类
注意注入的必须是spring下面的管理类,否则之后的操作都不行。
@Autowired
private TransactionManager transactionManager
第二步:编写业务代码
使用这个方法这能在两个连续的代码块中使用,如果两个相同库更新操作中间在加入其它数据库的操作,事务将不会起作用,需要用到其它方法来实现事务。
userMapper.selectUser(id);//这里使用的是数据库A
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus transactionStatus = transactionManager.getTransaction(def);
try {
financeInteractionRecordMapper.insert(entity);//这里使用的是数据库B
financeInteractionRecordMapper.update(entity);//这里使用的是数据库B
transactionManager.commit(transactionStatus);
} catch (Exception e) {
transactionManager.rollback(transactionStatus);
log.error("编程式事务业务异常回滚", e);
}
方式二:使用Atomikos进行多数据源事务配置
使用方法详见这篇教程:Atomikos的使用_atomikos使用_循环网络不循环的博客-CSDN博客