您好,登錄后才能下訂單哦!
本篇內容主要講解“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事務管理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。