中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Aop事務管理是什么

發布時間:2021-07-08 17:58:31 來源:億速云 閱讀:154 作者:chen 欄目:大數據

本篇內容主要講解“Spring Aop事務管理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Aop事務管理是什么”吧!

  • 同一個類中A方法調用B方法時,如果在B方法上面設置事務,B方法的事務不會生效,因為A方法不是通過代理對象訪問的,因此事務增強沒有生效。但需要注意的是,如果A方法上配置了事務,A和B是一個事務管理器管理的,則B方法還是在A方法的事務上下文中執行。

/**
     * 外層方法沒有配置事務,驗證調用同類方法時的場景:
     * 1、方法B配置事務、執行數據庫操作后拋出異常,數據不會回滾:因為方法內調用事務沒生效
     * 2、同上,通過代理對象訪問,事務回滾
*/
    public void pureA_tranB_throw() {
        // 沒有事務,事務正常提交
        db1Op();

        // 1、不會回滾,因為方法內調用事務沒生效
        //traB_throw();

        // 2、通過代理對象,事務會回滾
        C1Services c1Services = (C1Services) AopContext.currentProxy();
        c1Services.traB_throw();

        throw new RuntimeException("test rollback");
    }
    
    @Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
    public void traB_throw() {
        db1Op();
        throw new RuntimeException("test rollback");
    }
    
    /**
     * 外層方法配置事務,驗證調用同類方法時的場景:
     * 1、方法B配置事務、執行數據庫操作后拋出異常,雖然B方法未啟用事務的增強,但和外層事務屬于同一個事務管理器,數據會回滾
     */
    @Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
    public void traA_traB_throw() {
        // 有外層事務,事務會回滾
        db1Op();

        // 1、會回滾,因為雖然方法B的事務沒失效,但是外層屬于同一個事務管理器,因此外層事務會控制其回滾
        traB_throw();

        throw new RuntimeException("test rollback");
    }

  • 同一個類中A方法調用B2方法,A和B2的事務管理器不一樣,A方法上配置事務,B2上配置事務,B2執行異常。如果是A方法直接調用B2方法,B2不會回滾,同上因為事務增強沒生效,但通過代理對象訪問可以回滾。

 /**
     * 外層方法配置事務,驗證不同數據庫操作的場景:
     * 1、不會回滾,B2方法的事務增強未生效,且B2和外層方法不是一個事務管理器,所以不會受外層事務影響
     * 2、會回滾,B2方法的事務增強生效,執行異常,事務回滾
     */
    @Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
    public void traA_traB2_throw() {
        // 有事務,事務會回滾
        db1Op();

        ///1、不會回滾,事務增強沒生效
        //traB2_throw();

        // 通過代理對象,事務會回滾
        C1Services c1Services = (C1Services) AopContext.currentProxy();
        c1Services.traB2_throw();

        throw new RuntimeException("test rollback");
    }

    @Transactional(rollbackFor = RuntimeException.class, value = "db2transactionManager")
    public void traB2_throw() {
        db2();
        throw new RuntimeException("test rollback");
    }
 

  • 不同類中C1類的A方法調用C2類的B方法,通過類的實例對象調用B方法,如果B方法設置事務,因為是通過代理對象訪問,因此事務增強會生效。

  • 事務的傳播行為有:

REQUIRED    支持當前事務,如果當前事務不存在,則創建新事務。是spring事務管理的默認隔離級別
SUPPORTS    支持當前事務,如果當前事務不存在,則按照無事務運行
MANDATORY    支持當前事務,如果當前事務不存在,則拋出異常
REQUIRES_NEW    創建一個新事務,如果當前事務存在,則掛起當前事務
NOT_SUPPORTED    按照無事務運行,如果當前事務存在,則掛起當前事務
NEVER            按照無事務運行,如果當前事務存在,則拋出異常
NESTED        如果當前事務存在,則按照嵌套事務的方式執行,在特別的事務管理器上才會創建嵌套事務,一些JTA的提供者支持嵌套事務管理器

到此,相信大家對“Spring Aop事務管理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆尧县| 美姑县| 宜州市| 虎林市| 无棣县| 阿图什市| 佛教| 文化| 溧水县| 昆山市| 南华县| 新津县| 金乡县| 象州县| 潞城市| 射洪县| 修水县| 钦州市| 句容市| 涿鹿县| 余江县| 南丰县| 吉首市| 泾源县| 丰镇市| 阿荣旗| 车险| 江阴市| 漠河县| 北安市| 虎林市| 丰县| 晋州市| 哈密市| 连平县| 闽清县| 瑞安市| 湟源县| 赫章县| 庆安县| 涞水县|