春季-事务应使用一种方法提交,但应回滚进行数据库事务的其他方法

时间:2019-05-13 05:40:23

标签: java spring-mvc transactions rollback

在有情况的情况下,如何在Java中处理Spring事务:

一个服务方法,例如methodA()调用了另一个方法-methodB()。 在methodB()中,我正在执行一个验证,如果验证变为true,我将调用另一个methodC(),并且必须提交该方法,而所有其他方法都应回滚,即从methodA()和methodB()完成的事务必须回滚,但必须提交methodC中的事务,并且不能回滚。

为了回滚我使用的事务-

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

实时场景-

执行交易时,我尝试创建一些交易。根据这些交易,我检查值之一是否已达到阈值点,我需要触发邮件。该邮件是数据库事务。所有其他事务必须回滚,并且只有邮件事务必须持久。

任何帮助表示赞赏。

编辑:-

相似的问题-

commit changes in try-catch inside @Transactional

但这不能解决我的问题。如果在类级别和方法级别也给出了@Transactional,该怎么办??

1 个答案:

答案 0 :(得分:0)

在我看来,这样的代码

@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
}

并且,您最好测试一下它是否运作良好。

相关问题