提问人:Guillermo Nahuel Varelli 提问时间:10/26/2023 最后编辑:Guillermo Nahuel Varelli 更新时间:10/26/2023 访问量:27
Java 事务方法排除某些内部方法的回滚
Java Transactional method exclud rollback for certain inner method
问:
嗨,有以下代码片段,我想做的是拥有一个主要的事务方法 回滚所有插入,但我想避免回滚某些场景, 我的意思是做所有整个回滚所有其他嵌套方法,除了其中的一些
'公共类 myClass {
private DepositCancelledRepository depositRepo;
private DepositCancelledRepository depositCancelledRepo;
@DistributedLock(name = "mylocal", value = "#depositId")
@Transactional(rollbackFor = Exception.class, noRollbackFor = NoRollbackException.class)
public void outerMethod() {
saveDeposit()
saveDepositCancelled(depositCancelled);
otherMethhods that will throw ex for rollback
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveDeposit(DepositCancelled depositCancelled) {
depositCancelledRepo.save(depositCancelled);
}
public void saveDepositCancelled(DepositCancelled depositCancelled) {
depositRepo.save(depositCancelled);
}
}`
在这个例子中,我想避免回滚 saveDepositCancelled 即使 outerMethod 抛出异常,尝试使用 Propagation.REQUIRES_NEW 但如果外部方法失败,则不起作用,异常 saveDeposit 应该回滚并 saveDepositCancelled shoudld 不回滚
答:
0赞
Chasca
10/26/2023
#1
Spring 中的事务工作得益于代理。
因此,当您的方法 saveDeposit 或 saveDepositCancelled 被调用时,Spring 将看不到注释,因为您已经在代理实例中执行它们。
如果要实现这一点,则需要将代码分离在多个服务中,或者让一个服务从外部调用不同的方法。
评论