关闭

org.springframework.dao.CannotAcquireLockException异常分析

标签: spring事务嵌套异常
610人阅读 评论(0) 收藏 举报
分类:

错误信息如下:

2017-09-27 16:27:16.153 - 【com.ldyun.base.service.impl.BaseRetailOrderServiceImpl】 - 新增零售商品订单~org.springframework.dao.CannotAcquireLockException: 
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
### The error may involve com.ldyun.retail.mapper.RetailGoodsMapper.updateBySql-Inline
### The error occurred while setting parameters
### SQL: update retail_goods  SET stocks = stocks - CASE id  WHEN 83 THEN 1  END,saleCount = saleCount + CASE id  WHEN 83 THEN 1  END WHERE id IN (83)
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction~
经过网上资料查询,原因为:Spring 事务嵌套造成死锁。

经核实代码的确是service里面调用service,且两个service都配置了事务。顶层service名称为addRetailOrder,内层service名称为updateBysql。

事务配置为:

	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
			<tx:method name="del*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
			<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
			<tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
			<tx:method name="try*" propagation="REQUIRED" read-only="false" rollback-for="com.wm.base.exception.TransactionRollbackException" />
		</tx:attributes>
	</tx:advice>
解决方法为:

1、内层service实现方法配置@Transactional(propagation=Propagation.SUPPORTS)

	@Override
	@Transactional(propagation=Propagation.SUPPORTS)
	public int updateBySql(String sql) {
		// TODO Auto-generated method stub
		return retailGoodsDao.updateBySql(sql);
	}
2、外层service不配置事务,即修改方法名称。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

org.springframework.dao.CannotAcquireLockException解决

java.sql.SQLException: Lock wait timeout exceeded 该异常为一个service中调用了另一个service,两个service对同一表进行操作,造...
  • gongzi2311
  • gongzi2311
  • 2015-09-21 17:47
  • 6114

Spring 开发笔记之 java.sql.SQLException: Lock wait timeout exceeded | CannotAcquireLockException 的解决

《Spring 开发笔记之 java.sql.SQLException: Lock wait timeout exceeded |  org.springframework.dao.CannotAcq...
  • defonds
  • defonds
  • 2012-03-14 15:29
  • 18561

mysql数据库锁死,报错 mysql add/update error:org.springframework.dao.CannotAcquireLockException

在update数据很多的时候逐条update报错数据库表锁死: 报错: 严重: mysql add/update error:org.springframework.dao.CannotAcqui...
  • ak46143279
  • ak46143279
  • 2017-04-25 14:53
  • 1186

org.springframework.dao.CannotAcquireLockException

org.springframework.dao.CannotAcquireLockException 严重: mysql add/update error:org.springframework.d...
  • yueguanyun
  • yueguanyun
  • 2017-09-12 19:05
  • 332

org.hibernate.exception.LockAcquisitionException

org.hibernate.exception.LockAcquisitionException: could not insert: [com.yinhoo.elink.domain.UserRo...
  • tammy_zhu
  • tammy_zhu
  • 2010-07-07 14:48
  • 7959

Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction

问题场景 问题出现环境:  1、在同一事务内先后对同一条数据进行插入和更新操作;  2、多台服务器操作同一数据库;  3、瞬时出现高并发现象; 不断的有一下异常抛出,异常信息: o...
  • laukitto
  • laukitto
  • 2017-04-24 10:21
  • 768

事务&Hibernate中指定隔离级别

事务 l  事务:一组业务操作,要么全部成功,要么全部不成功。 在Hibernate中设置自动提交事务: l  特性:ACID        原子性:整体    ...
  • CSDN_GIA
  • CSDN_GIA
  • 2017-01-24 10:11
  • 1215

hibernate 事务和隔离级别

本文主要是学习hibernate的数据库事务和隔离级别的设置 1、什么是数据库事务? 事务是数据库并发控制的基本单元,作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行,它具有原子...
  • pingnanlee
  • pingnanlee
  • 2015-01-12 19:17
  • 2375

Java异常的栈轨迹(Stack Trace)

捕获到异常时,往往需要进行一些处理。比较简单直接的方式就是打印异常栈轨迹Stack Trace。说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方法。其实除了这个方法,还...
  • z69183787
  • z69183787
  • 2015-06-26 07:16
  • 1339

周报9.19-9.25异常org.springframework.dao.InvalidDataAccessApiUsageException的处理

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read...
  • juice_panda
  • juice_panda
  • 2016-09-28 16:13
  • 166
    个人资料
    • 访问:272958次
    • 积分:4640
    • 等级:
    • 排名:第7289名
    • 原创:168篇
    • 转载:250篇
    • 译文:5篇
    • 评论:30条
    最新评论