春季 - 交易应以一种方法进行提交,但应以其他执行数据库交易的方法回滚



如何在我有场景的Java中处理春季交易:

一种服务方法,请说Methoda((调用另一种方法-MethodB((。从methodb((中,我正在进行验证,如果该验证变为true,我将调用另一个methodc((,并且该方法必须订立,而所有其他方法都应获得回滚,即从methoda((和methodb((和methodb((完成的交易。必须获得回滚,但是MethodC中的交易必须进行,并且不能是回滚。

用于回滚我使用的交易 -

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

实时方案 -

执行交易时,我会尝试创建一些交易。根据这些交易,我检查一个值之一是否已达到阈值点,我需要触发邮件。该邮件是DB交易。所有其他交易必须卷回去,并且仅必须坚持邮件交易。

任何帮助。

编辑: -

类似的问题 -

提交在@transactional内部的try-catch中更改

但这并不能解决我的问题。如果 @transactional在班级和方法级别也给出怎么办。?

我认为,像这样的代码

@Transactional(propagation= Propagation.REQUIRED)
public void methodA() {
    methodB();
}
public void methodB() {
    if(validtaion=true){
        SeverB.methodC();
        throw YourException;
    }
}
// in ServerB.java
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodC() {
    // do your thing
}

,您最好测试它是否正常工作。

相关内容

最新更新