org.springframework.dao.CannotAcquireLockException异常分析
来源:互联网 发布:女程序员能干到多少岁 编辑:程序博客网 时间:2024/05/22 03:04
错误信息如下:
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 stubreturn retailGoodsDao.updateBySql(sql);}2、外层service不配置事务,即修改方法名称。
阅读全文
0 0
- org.springframework.dao.CannotAcquireLockException异常分析
- org.springframework.dao.CannotAcquireLockException
- org.springframework.dao.CannotAcquireLockException解决
- org.springframework.dao.InvalidDataAccessResourceUsageException异常
- org.springframework.dao.DuplicateKeyException异常分析及解决
- mysql数据库锁死,报错 mysql add/update error:org.springframework.dao.CannotAcquireLockException
- org/springframework/dao/support/PersistenceExceptionTranslator异常
- hibernate异常:org.springframework.dao.InvalidDataAccessApiUsageException解决办法
- org.springframework.dao.InvalidDataAccessApiUsageException问题解决与分析
- org.springframework.dao.InvalidDataAccessApiUsageException
- org.springframework.dao.InvalidDataAccessApiUsageException
- org.springframework.dao.DataIntegrityViolationException:
- org.springframework.dao.InvalidDataAccessApiUsageException
- org.springframework.dao.InvalidDataAccessApiUsageException
- org/springframework/dao/DataAccessException
- org.springframework.dao.InvalidDataAccessApiUsageException
- org.springframework.dao.TransientDataAccessResourceException
- org.springframework.dao.InvalidDataAccessApiUsageException
- Linux 基础练习题(一)
- 短视频图像处理 OpenGL ES 实践
- 老技术
- 第四章 Controller接口控制器详解(1)——跟着开涛学SpringMVC
- Android屏幕适配
- org.springframework.dao.CannotAcquireLockException异常分析
- eclipse默认编码为GBK,修改为UTF8的方法
- Android Studio NDK及so文件开发范例
- 漫谈分布式集群的负载均衡—口水篇
- 打开接受新知识的绿灯
- Clojure
- ubuntu为什么没有/etc/inittab文件? 深究ubuntu的启动流程分析
- printf,%02X和%x有什么区别
- 仓库管理