Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
- 2019-06-24 09:34:00
- admin 原创
- 8953
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
1、记录一次死锁的经历,自己写了一个方法测试一下死锁
出现死锁是因为不了解事物的隔离级别
* 保证同一个事务中
PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
* 保证没有在同一个事务中
PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行
下面是我的一段代码
@Transactional(rollbackFor = Exception.class) @Override public void test() { Goods goods=auGoodsDao.queryObject(1); goods.setName("11111"); auGoodsDao.update(goods); goodsPhotoService.test1(); }
@Override @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW) public void test1() { Goods goods=auGoodsDao.queryObject(1); goods.setName("11111"); auGoodsDao.update(goods); }此时是因为我操作了同一条数据,而且我是嵌套事物,另外一个事物新建一个事物,挂起了当前事物,导致数据出现了死锁,如果把propagation = Propagation.REQUIRES_NEW就可以了,
发表评论
文章分类
联系方式
联系人: | 郑州-小万 |
---|---|
电话: | 13803993919 |
Email: | 1027060531@qq.com |
QQ: | 1027060531 |
网址: | www.wanhejia.com |
Update Required
To play the media you will need to either update your browser to a recent version or update your Flash plugin.