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

标签 java spring-mvc transactions rollback

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

相关文章:

java - Axis 1.4 AxisFault 文件过早结束

spring-mvc - 如何将数据库连接信息和查询参数从 Controller 传递到 JasperReportsMultiFormatView

SQL模拟自增字段

sql - SQL Server 事务中的 SELECT 语句放置哪种类型的锁

tsql - 为什么原子语句需要锁提示?

java - java问题简介

java - Spring 中的 ResponseEntity 和 HttpEntity 有什么区别?

jsp - 使用 ModelAndView 传递对象,然后使用 JSTL 解析

java - 对于 Java 类,内部锁实际上意味着什么?

java - 从maven spring mvc创建表时出现问题