关于@Transactional回滚问题

本文讨论了Spring框架中,当@Transactional注解的方法抛出非运行时异常时,默认不会回滚事务。通过举例和提供解决方案,介绍了如何通过rollbackFor属性指定异常类型以实现事务回滚。
摘要由CSDN通过智能技术生成

当使用 @Transactional 注解的方法中抛出不受检查的异常(非 RuntimeException 或其子类)时,Spring 将默认不回滚事务。以下是代码案例。

@Service
public class MyNonRollbackService {

    @Transactional
    public void performNonRollbackOperation() throws Exception {
        // 此方法中的非运行时异常将不触发事务回滚
        doDatabaseOperation();
        throw new Exception("Simulating a checked exception");
    }

    private void doDatabaseOperation() {
        // 这里执行数据库操作
    }
}

在这个例子中,performNonRollbackOperation 方法上使用了 @Transactional 注解。当方法执行时,如果 doDatabaseOperation 方法或者 performNonRollbackOperation 方法中抛出的异常是非运行时异常,整个事务将不会回滚。类似非运行时异常中IOException、SQLException、ClassNotFoundException等等都会默认不回滚,要想解决该问题最简单的方式是@Transactional(rollbackFor = Exception.class)去指定异常从而回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值