spring Java transmittance方法排除了某些内部方法的回滚

pod7payv  于 2023-11-16  发布在  Spring
关注(0)|答案(1)|浏览(144)

你好,有下面的代码片段,我想做的是有一个主要的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不应该回滚

mdfafbf1

mdfafbf11#

Spring中的Transactions是通过代理来工作的。
因此,当调用方法saveDeposit或saveDepositCancelled时,Spring不会看到注解,因为您已经在代理示例中执行了它们。
如果你想实现这一点,你需要将你的代码分隔在几个服务中,或者让一个服务从外部调用不同的方法。

相关问题