Do *_*ill 5 spring hibernate transactions transactionmanager spring-data-jpa
作为一个事务的一部分,我必须更新两个数据源。那是 -
如果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();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,updateDb02中的setRollbackOnly()仅回滚Db01事务。
kol*_*ant 14
我已经解决使用ChainedTransactionManager这个问题- http://docs.spring.io/spring-data/commons/docs/1.6.2.RELEASE/api/org/springframework/data/transaction/ChainedTransactionManager.html
Spring Boot配置:
@Bean(name = "chainedTransactionManager")
public ChainedTransactionManager transactionManager(@Qualifier("primaryDs") PlatformTransactionManager ds1,
@Qualifier("secondaryDs") PlatformTransactionManager ds2) {
return new ChainedTransactionManager(ds1, ds2);
}
Run Code Online (Sandbox Code Playgroud)
然后可以按以下方式使用它:
@Transactional(value="chainedTransactionManager")
public void updateDb01() {
Entity01 entity01 = repository01.findOne(1234);
entity01.setName("Name");
repository01.save(entity01);
//Calling method to update DB02
updateDb02();
}
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10054 次 |
| 最近记录: |