【发布时间】:2018-08-03 22:01:39
【问题描述】:
作为一个事务的一部分,我必须更新两个数据源。那就是——
- 我在 DB1 中进行了更新。
- 然后,我在 DB2 中进行另一次更新。
如果 DB2 中的更新失败,我想回滚 DB1 和 DB2 以回滚。这可以使用@Transactional 来完成吗?
这是一个示例代码 -
@Transactional(value="db01TransactionManager")
public void updateDb01() {
Entity01 entity01 = repository01.findOne(1234);
entity01.setName("Name");
repository01.save(entity01);
//Calling method to update DB02
updateDb02();
}
@Transactional(value="db02TransactionManager")
public void updateDb02() {
Entity02 entity02 = repository02.findOne(1234);
entity02.setName("Name");
repository02.save(entity02);
//Added this to force a roll back for testing
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
我的问题是,updateDb02 中的 setRollbackOnly() 只回滚 Db01 事务。
【问题讨论】:
-
您需要一个支持 XA 的事务管理器..
标签: spring hibernate transactions spring-data-jpa transactionmanager