org.springframework.dao.CannotAcquireLockException解决

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) 

  

posted @ 2018-01-31 15:09  请叫我刀刀  阅读(4901)  评论(0编辑  收藏  举报