15、MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

2023-02-24,,

转载自

一、报错信息:

Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

具体报错信息如下图:

二、伪代码:

三、报错原因:

1、通过错误日志可以看出,错误原因跟 锁、事务有关,字面意思是:事务执行过长,锁等待超时,请尝试新的事务

2、其实在开发过程中并未报错,后来到了仿真环境,因为是员工端的原因,并发量略高,执行上面逻辑的第4步时,比较耗时,导致新的请求过来的时候,锁还未释放(因为无论删除、插入、还是更新、mysql都会默认加锁的),新的请求想要获取锁,等了很久也拿不到锁,就导致了锁等到超时,请尝试新的事务

四:解决方案

方法1、事务执行过长,去掉事务管理注解@Transactional

方法2、采用异步事务处理

        //耗时事务进行异步处理
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = Exception.class)
public void updateBusinessTenant() {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
//需要异步提交事务的代码
//......
//......
super.afterCommit();
}
}); }

15、MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction的相关教程结束。

《15、MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction.doc》

下载本文的Word格式文档,以方便收藏与打印。