事务工具类封装

日常开发中,一个方法中避免不了多次操作数据库,很多场景下会使用@Transactional注解,难免会出现大事务(业务代码也包含在其中),同时不在一个事务中,很可能就会引发事务问题,以下为事务封装工具类

工具类

@Component
public class TransactionSupport {

    @Transactional(rollbackFor = Exception.class)
    public void execute(Func func) {
        func.run();
    }

    @FunctionalInterface
    interface Func {
        void run();
    }
}

测试类

public class TestTransactional {

    @Autowired
    private TransactionSupport support;

    public void test() {
        support.execute(() -> {
            //删除
            //新增
        });
    }
}

解读

TransactionalSupport类的execute方法上标记了@Transactional(rollbackFor = Exception.class)注解,这意味着该方法中的数据库操作将会在一个事务中执行。在Spring中,默认情况下,只有未检查异常(即RuntimeException及其子类)会触发事务回滚,所以使用rollbackFor = Exception.class确保了在任何异常情况下都会回滚事务,包括受检查异常。
事务将在execute方法内部的Lambda表达式中启动。在Lambda表达式内部,如果任何数据库操作(删除或新增数据)抛出了未捕获的异常(无论是RuntimeException还是受检查异常),Spring将会自动回滚事务。
因此,使用这种方式确实可以保证在Lambda表达式中的多个数据库操作(删除和新增)在同一个事务中执行,并且如果发生异常,整个事务将会回滚,保证了ACID(原子性、一致性、隔离性、持久性)特性。

注意事项:
确保TransactionalSupport类被正确配置为Spring的组件(比如通过@Component或者在配置类中进行注册)。
确保在Spring上下文中能够正确地识别和管理事务配置和数据库连接。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值