内容来着《收割Offer:互联网大厂面经》
面试官提问
● Spring事务实现的原理是什么?
● 你可以自己动手实现Spring事务注解方法吗?
事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。事务只能依靠数据库实现。在 Spring 中通过 ThreadLocal 将业务线程与数据库连接绑定,多个数据库操作在一个连接中手动提交或者回滚事务。这就是 Spring 实现事务的原理。
下面用一个简单的例子来解释。
public void transfer(long userA, long userB, Long money) {
//模拟扣减转账人余额
dao.updateBalanceByAccount(userA, -money);
//触发异常
int i = 1/0 ;
//模拟增加收款人余额
dao. updateBalanceByAccount (userB,money);
}
问题分析:数据库两次操作可能不是同一个数据库连接,每个连接完成后会自动提交。这种情况下,对用户 B 操作失败无法回滚用户 A 的操作。