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

2020-08-06 23:04:40 +08:00
 vemier
有一个加了事务的方法,先是 deleteById,然后再 insertById,这两个方法的 id 是同一个 id

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

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

https://www.v2ex.com/t/696299

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

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

© 2021 V2EX