Spring 為什么要在事務(wù)注解 Transactional 中指定 rollbackFor

簡書日更 第10篇: Spring事務(wù)失效問題及解決方法


我們常用的是spring聲明式事務(wù)棚亩,即使用@Transactional注解 來對(duì)需要事務(wù)的方法進(jìn)行標(biāo)注鞋喇,在一定的情景下狸棍,會(huì)出現(xiàn)事務(wù)失效的問題伏嗜,
這也是一個(gè)經(jīng)常被問到的面試題粒蜈,今天來解析一下。

若只想看 Spring事務(wù)失效問題的解決方法 請(qǐng)?zhí)^前面2個(gè)小主題

1.Spring支持兩種類型的事務(wù)管理

編程式事務(wù)管理:我們需要手動(dòng)的對(duì)事務(wù)進(jìn)行提交和回滾罐脊,需要一定的代碼量和復(fù)雜度定嗓。

聲明式事務(wù)管理:業(yè)務(wù)代碼和事務(wù)管理分離,你只需用注解和XML配置來管理事務(wù)(SpringBoot中只需要使用注解即可)萍桌。

2.Spring事務(wù)的實(shí)現(xiàn)方式和實(shí)現(xiàn)原理

Spring事務(wù)的本質(zhì)其實(shí)就是數(shù)據(jù)庫對(duì)事務(wù)的支持宵溅,沒有數(shù)據(jù)庫的事務(wù)支持,spring是無法提供事務(wù)功能的上炎。
真正的數(shù)據(jù)庫層的事務(wù)提交和回滾是通過binlog或者redo log實(shí)現(xiàn)的层玲。

3.Spring事務(wù)失效的幾種可能

3.1 Spring因 傳播行為失效

spring是可能會(huì)因?yàn)閭鞑バ袨槎У模?dāng)我們?cè)赗UD的時(shí)候反症,可能會(huì)對(duì)其中的多個(gè)方法進(jìn)行事務(wù)辛块,但對(duì)事務(wù)的傳播行為限制有所不同,
又因?yàn)閟pring的聲明式事務(wù)是基于AOP的铅碍,當(dāng)不同的方法在同一個(gè)類中的時(shí)候润绵,如果直接調(diào)用,則無法讓AOP生效胞谈,則會(huì)導(dǎo)致被調(diào)用的方法
傳播行為失效尘盼。
解決辦法為:使用注入的方式,調(diào)用其方法烦绳。

3.2 Spring因 rollbackFor 失效

@Transactional的寫法
開始@Transactional如果只這樣寫卿捎,

那,當(dāng)投擲一個(gè)此類RuntimeException子類實(shí)例的實(shí)例時(shí)径密。(Errors也一樣-交替地-標(biāo)識(shí)事務(wù)回滾午阵。)從事務(wù)方法中拋出的已檢查異常將不被標(biāo)識(shí)進(jìn)行事務(wù)回滾。

  • 讓checked例外也回滾:在整個(gè)方法前加上@Transactional(rollbackFor = Exception.class)

  • 讓unchecked例外不回滾:@Transactional(notRollbackFor = RunTimeException.class)

  • 不需要事務(wù)管理的(只查詢的)方法:@Transactional(傳播=傳播。NOT_SUPPORTED)

注意:如果異常被try {} catch {}扔掉底桂,事務(wù)就不回滾了植袍,如果想讓事務(wù)回滾必須再往外拋try {} catch {throw Exception}。

注意:

Spring團(tuán)隊(duì)的建議是你在具體的類(或類的方法)上使用@Transactional注解籽懦,而不要使用在類所要實(shí)現(xiàn)的任何接口上于个。你當(dāng)然可以在接口上使用@Transactional注解,但是這將只能因?yàn)樽⒔馐遣荒芾^承的暮顺,這意味著如果您正在使用基于類的代理時(shí)厅篓,那么事務(wù)的設(shè)置將不能被基于類的代理所識(shí)別,而且對(duì)象也將不會(huì)被事務(wù)代理所包裝(將被確認(rèn)為嚴(yán)重的)捶码。因此贷笛,請(qǐng)接受Spring團(tuán)隊(duì)的建議和在具體的類上使用@Transactional注解。
@Transactional注解標(biāo)識(shí)的方法宙项,處理過程正確 的簡單乏苦。尤其是帶鎖的事務(wù)方法,能不放在事務(wù)里面的最好不要放在事務(wù)里面尤筐』慵觯可以將常規(guī)的數(shù)據(jù)庫查詢操作放在事務(wù)前面進(jìn)行,而事務(wù)內(nèi)部進(jìn)行增值盆繁,刪除掀淘,改,加鎖查詢等操作油昂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末革娄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冕碟,更是在濱河造成了極大的恐慌拦惋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件安寺,死亡現(xiàn)場(chǎng)離奇詭異厕妖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挑庶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門言秸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迎捺,你說我怎么就攤上這事举畸。” “怎么了凳枝?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵抄沮,是天一觀的道長。 經(jīng)常有香客問我,道長合是,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任锭环,我火速辦了婚禮聪全,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辅辩。我一直安慰自己难礼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布玫锋。 她就那樣靜靜地躺著蛾茉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撩鹿。 梳的紋絲不亂的頭發(fā)上谦炬,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音节沦,去河邊找鬼键思。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甫贯,可吹牛的內(nèi)容都是我干的吼鳞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叫搁,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赔桌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渴逻,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤疾党,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后惨奕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仿贬,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年墓贿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茧泪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聋袋,死狀恐怖队伟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幽勒,我是刑警寧澤嗜侮,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響锈颗,放射性物質(zhì)發(fā)生泄漏顷霹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一击吱、第九天 我趴在偏房一處隱蔽的房頂上張望淋淀。 院中可真熱鬧,春花似錦覆醇、人聲如沸朵纷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袍辞。三九已至,卻和暖如春常摧,著一層夾襖步出監(jiān)牢的瞬間搅吁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工落午, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留似芝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓板甘,卻偏偏與公主長得像党瓮,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盐类,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353