使用@Transactional时怎么主动进行事务回滚(非异常情况下)

本文介绍了如何在使用@Transactional注解的声明式事务管理中,当特定条件满足时主动触发事务回滚,即使方法没有抛出异常,通过TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()实现。
摘要由CSDN通过智能技术生成

在使用 @Transactional 注解进行声明式事务管理时,通常情况下,事务会在方法抛出未捕获的异常时自动回滚。但有时你可能需要在方法的某个条件下主动触发事务回滚,而不依赖于异常的抛出。

示例: 

@Service
@Transactional
public class DemoServiceImpl implements DemoService {

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public CommVO<InitVO> init() {
        
        // 假设这里要回滚事务
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

        return null;
    }

Propagation.REQUIRES_NEW 表示每次调用被注解的方法时都会创建一个新的事务。如果当前存在一个事务,它会被挂起,直到被注解的方法执行完毕。

通过 @Transactional 注解来标识一个方法或类应该被包装在一个事务中执行。

当某些条件满足时,你可能希望在事务中显式地设置回滚,即使方法本身没有抛出异常,此时可以使用

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 

 注:回滚后不需要开启新事物

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙一招

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值