您好,登錄后才能下訂單哦!
本篇內容主要講解“@Transactional注解怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“@Transactional注解怎么用”吧!
在多個事務嵌套使用時,排除事務之間的回滾影響
在不同服務類的方法中使用Transactional的propagation屬性來實現隔離事務。(注意兩個方法不在同一個服務類中)
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(propagation=Propagation.REQUIRED)//如果有事務,那么加入事務,沒有的話新創建一個;不指定propagation默認就是這個 @Transactional(propagation=Propagation.REQUIREDS_NEW)//不管是否存在事務,都創建一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務,
A事務方法調用B事務方法時如果兩個事務注解在生效的情況下,在這里A事務稱為父類,B事務稱為子類;A方法操作數據庫后調用B方法,下列異常拋出時保證AB方法里對數據庫操作都完成了才拋出異常;RuleException繼承的RuntimeException;
列舉一下測試結果:
總結:
1.如果子類方法拋出的異常,不管滿足子類還是父類的注解的回滾事務就會回滾;
2.如果父類拋出異常,只看父類的事務注解,如果回滾就父子皆回滾,如果不回滾父子皆不回滾
這種情況下子事務開啟了新的session,父事務先鎖定一條記錄(for update)子事務也鎖這一條記錄時就會死鎖;這點要注意。
到此,相信大家對“@Transactional注解怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。