当执行单元测试(mvn test
)时,有时会出现以下异常:
org.springframework.dao.CannotAcquireLockException:
### Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
### The error may involve com.foo.dao.mapper.TestMapper.insertSuccesfulPaymentOrder-Inline
### The error occurred while setting parameters
### SQL: insert into order(order_seq,note,user_id,product_id, pay_status) values(uuid(),'',?,?,1)
### Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
从mysql文档中,我了解到:
InnoDB事务在放弃之前等待行锁的时间长度(以秒为单位)。默认值为50秒。如果一个事务尝试访问被另一个InnoDB事务锁定的行,则在发出以下错误之前,最多等待此多秒钟以获得对该行的写入访问权限:
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
因此,我认为只有在更新某些行时才会出现此异常,但我的操作是插入
,为什么仍然会出现此异常?如何在mysql会话中直接重现它?
mvn test
,它是正常的。可惜我不知道什么时候会再次发生。所以我想知道如何直接在 MySQL 控制台中重现它。 - zhuguowei