美文网首页
记录一次SpringBoot的事务异常

记录一次SpringBoot的事务异常

作者: MathCEC | 来源:发表于2019-10-18 19:22 被阅读0次

某次开发是出现了一次事务的异常,首先看一下报错信息:

org.springframework.dao.CannotAcquireLockException: 
### Error updating database.  Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
### The error may exist in com/mwbg/tucarstatus/dao/ProcessStatusDao.java (best guess)
### The error may involve com.mwbg.tucarstatus.dao.ProcessStatusDao.change-Inline
### The error occurred while setting parameters
### SQL: UPDATE (某个表) SET (某个字段)=? WHERE (id=?)
### Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

后来发现在一个事务中,有两次更新同一条记录的情况,也由此导致了后一次操作操作了之前被锁的一行数据,然后出现了此类异常,还有可能出现这个情况的原因还有如下:

故只需要解决在一个事务内不同时操作一条记录即可

业务逻辑是这样的:
A业务负责修改一张表table_a,B业务调用A业务,同时自己修改表table_b,这个时候,B业务又自行修改了table_a造成了该行被锁。

相关文章

网友评论

      本文标题:记录一次SpringBoot的事务异常

      本文链接:https://www.haomeiwen.com/subject/niswmctx.html