美文网首页
解决CannotAcquireLockException

解决CannotAcquireLockException

作者: 刹那真实 | 来源:发表于2019-04-02 16:33 被阅读0次

一大早实施同事找,说是系统业务异常。查看日志,发现有数据库死锁的问题。

org.springframework.dao.CannotAcquireLockException: PreparedStatementCallback; 
SQL [insert into pla_common(common_key,common_value,stint,url) values(?,?,?,?)]; 
Lock wait timeout exceeded; try restarting transaction; 
nested exception com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:
 Lock wait timeout exceeded; try restarting transaction

于是根据度娘指引,查数据库死锁。可查来查去,数据库一切正常,没有死锁!发现这问题已经超纲,就联系了DBA同事,DBA用root用户查,还是一切正常。遂怀疑是程序的问题,与数据库无关。
抱着试试看的态度,查了下CannotAcquireLockException这个异常,才发现可能是事务嵌套的问题。
果然在代码中发现了一个service中调用了两次包含insert操作的方法。

result = saveCommitApply((boolean)getUrl(formMap).get("isOutRreach"),getUrl(formMap).get("url").toString(),formMap);

在getUrl中有涉及数据库insert的操作,此处将getUrl调用了两次。相当于在一个事务中,对同一张表进行了两次insert。第一个未提交,也就未释放锁,第二个insert等待锁超时,就抛出了CannotAcquireLockException异常。

修改后:

 Map<String,Object> url = getUrl(formMap);
 result = saveCommitApply((boolean)url.get("isOutRreach"),url.get("url").toString(),formMap);

相关文章

  • 解决CannotAcquireLockException

    一大早实施同事找,说是系统业务异常。查看日志,发现有数据库死锁的问题。 于是根据度娘指引,查数据库死锁。可查来查去...

  • CannotAcquireLockException||Lock

    sqlServer数据库环境下出现CannotAcquireLockException和LockAcquisiti...

  • 【解决】

    解决理想 解决生活 解决让我平凡的错 解决孤单 解决折磨 解决一开始就着了的魔 解决饥饿 解决战火 解决核时代被抽...

  • 报错集锦

    问题一: 解决: 问题二: 解决: 问题三: 解决: 问题四: 解决: 问题五: 解决:

  • 解决 问题 解决

    你解决一个问题,就像当于解决无数个问题。听到这句话的时候我已经毕业了。回想之前的学习经历,一张试卷,碰到难题就放那...

  • some

    枪解决了, 炮解决了, 人解决了, 衣服解决了, 时间解决了, 地方解决了, 就看着车马飞驰, 结局降临, 吾事已毕。

  • 我还是在这里

    生活不能解决的事情,日记可以解决;日记不能解决的事情,思想可以解决;思想不能解决的事情,放空可以解决;放...

  • 页面布局(三栏布局)

    浮动解决方案 绝对定位解决方案 flexbox解决方案 表格布局解决方案 网格布局解决方案

  • 忙起来

    忙碌,能解决很多问题 解决你胡思乱想的问题 解决你彷徨迷茫的问题 解决你痴心妄想的问题 解决你自卑弱小的问题 解决...

  • ……纵情沉浸于清愁与静谧吧

    生活不能解决的事情,日记可以解决;日记不能解决的事情,思想可以解决;思想不能解决的事情,放空可以解决;放空不...

网友评论

      本文标题:解决CannotAcquireLockException

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