如何在 Java 中处理 Spring Transaction,我有一个场景:
服务方法假设 methodA() 调用另一个方法 - methodB()。 从 methodB() 中,我正在进行验证,如果该验证变为 true,我将调用另一个 methodC() 并且该方法必须提交,而所有其他方法应该回滚,即从 methodA() 和 methodB() 完成的事务必须回滚,但methodC中的事务必须提交,并且不能回滚。
为了回滚我使用的事务 -
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
实时场景 -
当我执行交易时,我尝试创建一些交易。根据这些交易,我检查其中一个值是否已达到阈值,我需要触发一封邮件。这封邮件是一个数据库事务。所有其他事务都必须回滚,并且只有邮件事务必须被持久化。
感谢任何帮助。
编辑:-
类似问题 -
commit changes in try-catch inside @Transactional
但这并不能解决我的问题。如果 @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
}
而且,你最好测试一下它是否工作正常。
关于java - Spring - 事务应该在一种方法中提交,但应该在执行数据库事务的其他方法中回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106325/