java.sql.SQLException: Lock wait timeout exceeded
该异常为一个service中调用了另一个service,两个service对同一表进行操作,造成事务嵌套,从而死锁。
解决办法:在当前方法前加入@Transactional(propagation=Propagation.SUPPORTS)
- @Transactional(propagation=Propagation.REQUIRED)
- // 容器不为这个方法开启事务
- @Transactional(propagation=Propagation.NOT_SUPPORTED)
- // 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
- @Transactional(propagation=Propagation.REQUIRES_NEW)
- // 必须在一个已有的事务中执行,否则抛出异常
- @Transactional(propagation=Propagation.MANDATORY)
- // 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
- @Transactional(propagation=Propagation.NEVER)
- // 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
- @Transactional(propagation=Propagation.SUPPORTS)