其他分享
首页 > 其他分享> > @Transactional 和 @DSTransactional 混用可能会造成事务死锁

@Transactional 和 @DSTransactional 混用可能会造成事务死锁

作者:互联网

@Transactional 是 spring 中的注解。

 @DSTransactional 是 mybatis-plus 中的注解。

两者都可以控制事务处理。但不能混用!尤其是在多数据源的情况下,可能会造成事务死锁。

这个问题是怎么发现的呢?在某一次死锁的排查中,在查询数据库的锁的时候,发现对某一个表的锁是一个不同的 sessionId, 和这个事务更新其它表的 sessionId 不一样!代码刚好是在一个事务中同时用到了上面个注解!

 


public AService {
    @Resource
    private BService bservice;

    @DSTransactional
    public void complete(...) {
        // 其它操作
        bservice.updateBusiness();
    }
}

public BService {

    @Transactional(rollback = Throwable.class)
    public void updateBusiness(...) {
        // 其它操作
    }
}


 

标签:事务,Transactional,DSTransactional,死锁,注解,public
来源: https://www.cnblogs.com/qkhh/p/16433264.html