内容来着《收割Offer:互联网大厂面经》

面试官提问

● Spring事务实现的原理是什么?

● 你可以自己动手实现Spring事务注解方法吗?

事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。事务只能依靠数据库实现。在 Spring 中通过 ThreadLocal 将业务线程与数据库连接绑定,多个数据库操作在一个连接中手动提交或者回滚事务。这就是 Spring 实现事务的原理。

下面用一个简单的例子来解释。

1 存在问题的事务方法

    public void transfer(long userA, long userB, Long money) {
        //模拟扣减转账人余额
        dao.updateBalanceByAccount(userA, -money);
        //触发异常
        int i = 1/0 ;
        //模拟增加收款人余额
        dao. updateBalanceByAccount (userB,money);
     }

问题分析:数据库两次操作可能不是同一个数据库连接,每个连接完成后会自动提交。这种情况下,对用户 B 操作失败无法回滚用户 A 的操作。

2 事务实现的简单说明