为什么跑集成测试时会出现 mysql 死锁

2020 年 8 月 6 日
 vemier
有一个加了事务的方法,先是 deleteById,然后再 insertById,这两个方法的 id 是同一个 id

通过接口调用没有问题,用 maven 跑集成测试就死锁了,通过 SELECT * FROM sys.innodb_lock_waits 可以看到 insertById 被 deleteById block 住了,去掉事务的话集成测试就可以跑过去,为啥会这样...
2970 次点击
所在节点    MySQL
5 条回复
AngryPanda
2020 年 8 月 7 日
insertById 是什么鬼?先有 id 再 insert ?
wakzz
2020 年 8 月 7 日
mysql 的行锁,一个事务写一条记录未提交,该记录锁住,所以另一个事务无法写该记录。
vemier
2020 年 8 月 7 日
@AngryPanda 写错了,是 insert(aId,bId)
vemier
2020 年 8 月 7 日
failsafe 插件配置<reuseForks>false</reuseForks><forkCount>1</forkCount>就可以了
vemier
2020 年 8 月 7 日
@wakzz 这些方法都在一个事务里的。不清楚 failsafe 的这个 fork 机制做了什么东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/696299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX