分布式锁与spring事物管理顺序问题

技术 Mar 31, 2020

使用zookeeper的临时顺序节点分布式锁的时候,锁住service层时,执行完整个service方法时,锁释放,但此时spring 管理的事物还未提交。在并发情况下会导致数据问题。

第一个线程执行update之后 但由于事物还未提交成功。分布式锁却已经释放,下一个线程执行 select 获取的还是update之前的数据。导致数据出现问题。

所以要修改 spring事物 和 分布式锁释放的先后顺序。先提交事务之后,再释放掉分布式锁。

或直接锁controller层就可以避免此问题。

这里再多说一句,分布式锁不能保证数据一致性,只能保证当前业务层service的唯一调用。

如果其他service方法中 也在处理这一条数据,那么数据将会出现问题。

所以理应给表中添加乐观锁字段。

tanzhuo

咸鱼一只