spring 事务使用的坑

来源:互联网 发布:机械绘图软件 编辑:程序博客网 时间:2024/05/20 19:47

1、业务背景介绍
1)tomcat集群通过数据库的唯一索引来处理并发问题,比如username的唯一性,这样业务代码里面可以不需要写同步逻辑;
2)保存用户的业务逻辑使用事务,先保存用户信息,再统计新增用户数,这个时候新增用户数和数据库中的有效数据记录会不一致,

2、原因分析
保存用户的业务逻辑因为使用事务,保存用户信息时需要在函数执行完才提交,相当于相同username的记录保存时函数返回不会抛异常,会继续执行内存更新新增用户的逻辑,当在函数执行完执行提交时,相同username的记录会抛出key唯一的异常,但是这时内存的用户计数已经更新了,这样就导致了新增用户的内存计数和数据库的有效记录不一致

总结,使用事务的时候,一定要注意记录是在函数执行完统一提交的,若业务逻辑中有依赖记录成功保存的条件,这时事务操作是不合适的。

0 0