场景: web 向后台发起一个比如添加用户的请求,这个接口是插入一条用户数据和一条角色关联数据(假设这里的角色是唯一的,一个角色只能被一个用户关联)。
第一次调用超时,第二次重试的调用成功,但是发现数据库有两条一模一样的数据,包括唯一的角色
我在业务代码里校验了角色是否存在(不要问我为啥没用唯一键,为了模拟场景),但是发现并没触发
看了下数据,两个 user 数据的插入时间是大概相差 20s,但关联表的 role 数据的插入时间反而是一样,非常疑惑
我怀疑第一次的时候调用还没失败但等待的时候导致超时,然后第二次重试才会略过我的代码校验,然后因为事务传播的默认设置,导致用了前一次的事务,最后两条数据一起被提交。
propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.