SprintBoot 使用this.調用含有mysql事務的方法時,事務失效

大概場景如下 , 使用this.調用本文件中的方法

@Override
    public void giveProfit() {
        this.profit(x, productInfo.getProfitRate());
    }

@Transactional(rollbackFor = Exception.class)
    public void profit() {
    	// sql.....
    }

profit方法中的事務會失效, 原因:

AOP使用的是動態代理的機制,它會給類生成一個代理類,事務的相關操作都在代理類上完成。內部方式使用this調用方式時,使用的是實例調用,並沒有通過代理類調用方法,所以會導致事務失效。

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