@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(...) {
        // 其它操作
    }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章