gpt4 book ai didi

java - Spring - 事务应该在一种方法中提交,但应该在执行数据库事务的其他方法中回滚

转载 作者:行者123 更新时间:2023-12-02 05:44:46 25 4
gpt4 key购买 nike

如何在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com