Spring @Transaction要了解一下?是解决不了跨库事务的.跨库一般都是使用二阶段提交 第一阶段:预提交(预先锁定资源(订单、库存),预先校验数据库、缓存中间件服务是否正常,帮我们把可能出错的场景预先校验一遍),先把sql执行了,把结果告诉事务管理器(中间协调者);如果两个操作都成功,就执行第二阶段,commit,有一个失败的话,执行rollback操作。 分布式事务不可能100%解决。只可能尽量提供成功概率。 第一阶段和第二阶段的间隔很短,基本不会出现第一阶段成功,第二阶段执行之前库存库挂了。这种的概率及其小,可以通过重试解决。 极端情况下通过人工介入、事务补偿; atomikos可以解决跨库提交问题,底层就是二阶段提交。一线互联网公司用的很少,不过原理是一样的。