你好,有下面的代码片段,我想做的是有一个主要的transactional方法,回滚所有的插入,但我想避免回滚一些escenario特别是,我的意思是做所有的整个回滚所有其他嵌套的方法,不包括一些o他们
public class 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抛出异常,尝试与传播.REQUIRES_NEW,但不工作,如果外部方法失败,其中异常saveDeposit应该回滚和saveDepositCancelled不应该回滚
1条答案
按热度按时间mdfafbf11#
Spring中的Transactions是通过代理来工作的。
因此,当调用方法saveDeposit或saveDepositCancelled时,Spring不会看到注解,因为您已经在代理示例中执行了它们。
如果你想实现这一点,你需要将你的代码分隔在几个服务中,或者让一个服务从外部调用不同的方法。