在有情况的情况下,如何在Java中处理Spring事务:
一个服务方法,例如methodA()调用了另一个方法-methodB()。 在methodB()中,我正在执行一个验证,如果验证变为true,我将调用另一个methodC(),并且必须提交该方法,而所有其他方法都应回滚,即从methodA()和methodB()完成的事务必须回滚,但必须提交methodC中的事务,并且不能回滚。
为了回滚我使用的事务-
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
实时场景-
执行交易时,我尝试创建一些交易。根据这些交易,我检查值之一是否已达到阈值点,我需要触发邮件。该邮件是数据库事务。所有其他事务必须回滚,并且只有邮件事务必须持久。
任何帮助表示赞赏。
编辑:-
相似的问题-
commit changes in try-catch inside @Transactional
但这不能解决我的问题。如果在类级别和方法级别也给出了@Transactional,该怎么办??
答案 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
}
并且,您最好测试一下它是否运作良好。