@Transactional注解:多個事務嵌套時,獨立事務處理方式
@Transactional注解:多事務嵌套,獨立事務處理
看下需求
在多個事務嵌套使用時,排除事務之間的回滾影響
解決方案
在不同服務類的方法中使用Transactional的propagation屬性來實現(xiàn)隔離事務。(注意兩個方法不在同一個服務類中)
Propagation.REQUIRES_NEW即說明該事務開啟單獨事務,不受其他事務影響
// 服務類A @Autowired private ABizService aBizService; @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public String insert(FacedbInfoDTO facedbInfoDTO) throws ServiceException { ... aBizService.generateId(); } // 服務類B @Override @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public String generateId() { ... }
嵌套事務分析@Transactional
事務類型總共有七種;在這就介紹常用的的兩個。
@Transactional(propagation=Propagation.REQUIRED)//如果有事務,那么加入事務,沒有的話新創(chuàng)建一個;不指定propagation默認就是這個 @Transactional(propagation=Propagation.REQUIREDS_NEW)//不管是否存在事務,都創(chuàng)建一個新的事務,原來的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務,
Propagation.REQUIRED類型事務嵌套
A事務方法調(diào)用B事務方法時如果兩個事務注解在生效的情況下,在這里A事務稱為父類,B事務稱為子類;A方法操作數(shù)據(jù)庫后調(diào)用B方法,下列異常拋出時保證AB方法里對數(shù)據(jù)庫操作都完成了才拋出異常;RuleException繼承的RuntimeException;
列舉一下測試結(jié)果:
總結(jié):
1.如果子類方法拋出的異常,不管滿足子類還是父類的注解的回滾事務就會回滾;
2.如果父類拋出異常,只看父類的事務注解,如果回滾就父子皆回滾,如果不回滾父子皆不回滾
嵌套事務類型是Propagation.REQUIRES_NEW
這種情況下子事務開啟了新的session,父事務先鎖定一條記錄(for update)子事務也鎖這一條記錄時就會死鎖;這點要注意;
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot中使用JSR-303實現(xiàn)請求參數(shù)校驗
這篇文章主要介紹了Spring Boot中使用JSR-303實現(xiàn)請求參數(shù)校驗,JSR-303校驗我們一般都是對Java的實體類對象進行校驗,主要檢驗JSR-303是Java中的一個規(guī)范,用于實現(xiàn)請求參數(shù)校驗在我們的實體類對象的屬性上,感興趣的朋友跟隨小編一起看看吧2023-10-10了解spring中的CloudNetflix Hystrix彈性客戶端
這篇文章主要介紹了了解spring中的CloudNetflix Hystrix彈性客戶端,客戶端彈性模式是在遠程服務發(fā)生錯誤或表現(xiàn)不佳時保護遠程資源(另一個微服務調(diào)用或者數(shù)據(jù)庫查詢)免于崩潰。,需要的朋友可以參考下2019-06-06javascript與jsp發(fā)送請求到servlet的幾種方式實例
本文分別給出了javascript發(fā)送請求到servlet的5種方式實例與 jsp發(fā)送請求到servlet的6種方式實例2018-03-03Spring開發(fā)核心之AOP的實現(xiàn)與切入點持久化
面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍?nbsp;“類”和“對象” 的使用,面向切面編程,簡單的說,就是動態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程2022-10-10Java通過綁定實現(xiàn)快速將數(shù)據(jù)導出至Excel
把數(shù)據(jù)導出至?Excel?是很常見的需求,而數(shù)據(jù)的持久化,往往又放在數(shù)據(jù)庫中,因此把數(shù)據(jù)庫中的數(shù)據(jù)導出到?Excel中,成了非常普遍的一個需求,下面我們就來看看Java如何通過綁定實現(xiàn)快速將數(shù)據(jù)導出至Excel吧2023-10-10使用Spring初始化加載InitializingBean()方法
這篇文章主要介紹了使用Spring初始化加載InitializingBean()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01