




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第關(guān)于Spring中@Transactional事務回滾的注意事項目錄一、Spring默認事務1.1、拋出unchecked和checked異常都回滾1.2、總結(jié)二、使用Spring中@Transactional注解的注意事項
一、Spring默認事務
Spring中@Transactional注解,默認情況下,只對拋出的RuntimeException異常,才會事務回滾。
如果事務的方法中拋出unchecked異常(RuntimeException),事務會進行回滾(rollback);如果事務的方法中拋出是checked異常(Exception),事務不會回滾。
也就是說,默認情況下,@Transactional注解只對拋出的RuntimeException異常和其子類異常才有效,對Exception及Exception的子類異常無效。
偽代碼說明
//@Transactional默認就是RuntimeException有效,拋出RuntimeException時,事務會回滾。
@Transactional
publicvoidmethodName1(){
//...各種的業(yè)務邏輯省略
thrownewRuntimeException("RuntimeException");
//@Transactional默認就是RuntimeException有效,拋出Exception時,事務不會回滾。
@Transactional
publicvoidmethodName22(){
//...各種的業(yè)務邏輯省略
thrownewException("Exception");
//@Transactional指定回滾事務是Exception時,遇到RuntimeException時,事務不會回滾
@Transactional(rollbackFor=Exception.class)
publicvoidmethodName3(){
//...各種的業(yè)務邏輯省略
thrownewRuntimeException("RuntimeException");
//@Transactional指定回滾事務是Exception時,遇到異常Exception時,事務會回滾,
@Transactional(rollbackFor=Exception.class)
publicvoidmethodName4(){
//...各種的業(yè)務邏輯省略
thrownewException("Exception");
}
@Transactional相當于@Transactional(rollbackFor=RuntimeException.class),只對拋出的RuntimeException異常,才會事務回滾。
1.1、拋出unchecked和checked異常都回滾
如果希望無論拋出是RuntimeException(unchecked),還是Exception(checked),事務都要回滾。
@Transactional(rollbackFor={RuntimeException.class,Exception.class})
publicvoidmethodName5(){
//...業(yè)務省略
if(){
thrownewRuntimeException("RuntimeException");
//...業(yè)務省略
if(){
thrownewException("Exception");
}
1.2、總結(jié)
Spring中@Transactional,默認只對拋出的RuntimeException的出常,事務才會回滾。如果希望無論拋出是RuntimeException,還是Exception,事務都要回滾,請使用如下配置。
@Transactional(rollbackFor={RuntimeException.class,Exception.class})
二、使用Spring中@Transactional注解的注意事項
@Transactional注解只能應用到public的方法上。如果你在protected、private或者package-visible的方法上使用@Transactional注解,它也不會報錯,但是這個被注解的方法將不會展示已配置的事務設(shè)置。配置proxy-target-class是指定基于接口的,還是基于類的代理被創(chuàng)建。如果proxy-target-class=false(默認值),那么標準的JDK基于接口的代理。如果proxy-target-class=true,那么基于類的代理將起作用(需要CGLIB庫)。@Transactional注解加在具體方法(或類)上面,而不是接口上面。在接口上使用@Transactional注解,只能當你設(shè)置了基于接口的代理時它才生效。因為注解是不能繼承的,這就意味著如果正在使用基于類的代理時,那么事務的設(shè)置將不能被基于類的代理所識別,而且對象也將不會被事務代理所包裝。@Transactional的事務是通過基于接口的,或者是基于類的代理才能被創(chuàng)建。在同一個類中一個方法調(diào)用另一個有事務注解的方法,事務是不會起作用的。
這條能理解嗎?下面是解釋說明。
偽代碼說明
@Serive
publicclassXxxService{
publicvoidaa(){
//業(yè)務...
bb()
//業(yè)務...
@Transactional
publicvoidbb(){
//業(yè)務...
@Controller
publicclassXxxController(){
@Autowired
XxxServicexxxService;
@RquestMapping("/hello")
publicvoidhello(){
xxxService.aa();
XxxController.hello()調(diào)用XxxService時,沒有開啟事務,在aa()、bb()發(fā)生的RuntimerException不會事務回滾。
分析說明:
(1)因為aa()沒有@Transactional注解,因此XxxController調(diào)用XxxService時,沒有開啟事務;
(2)aa()中調(diào)有bb()只是方法的調(diào)用(代碼片段的調(diào)用)。類似于Thread中,開啟線程是通過start()方法,而不是直接調(diào)用run()方法。
spring在掃描bean的時候會掃描方法上是否包含@Transactional事務注解,如果包含,則spring會為這個bean動態(tài)地生成一個子類(即代理類,proxy),代理類是繼承原來那個bean。
當這個有事務注解的方法被調(diào)用的時候,實際上是由代理類來調(diào)用的,代理類在調(diào)用之前就會開啟事務(transaction)。
但是,如果先調(diào)用一個沒有事務
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物化學(第4版)課件 第6章 生物氧化
- 現(xiàn)實題材紀錄片的人物塑造策略研究-以畢業(yè)作品《追星星的人》為例
- 身體健康素質(zhì)教育體系構(gòu)建與實施
- 節(jié)約糧食中班健康教案
- 大學交通安全與法治教育
- 清洗外墻安全培訓
- 顱骨說課課件
- 寶寶夜間急救方案護理
- 預防殘疾主題班會課件
- 預防兒童疾病課件教學
- 2025年度地質(zhì)勘探監(jiān)理服務合同范本
- 保山隆陽區(qū)小升初數(shù)學試卷
- 2025年上半年北京市西城區(qū)教委事業(yè)單位公開招聘考試筆試易考易錯模擬試題(共500題)試卷后附參考答案
- RoHS知識培訓課件
- 2024-2025學年北京西城區(qū)高一(上)期末語文試卷(含答案)
- 2025年貴州貴旅集團雷山文化旅游產(chǎn)業(yè)發(fā)展有限責任公司招聘筆試參考題庫附帶答案詳解
- 2024年初升高數(shù)學銜接教材講義
- 血小板減少護理查房課件
- 人教版(2024)數(shù)學七年級上冊期末測試卷(含答案)
- 辦公用品、易耗品供貨服務方案
- 火龍罐治療頸椎病個案
評論
0/150
提交評論