@Transactional注解的rollbackFor屬性

先回憶下java的異常模型朱躺,Throwable是最頂層的父類(lèi),有Error和Exception兩個(gè)子類(lèi)宇弛。
Error表示嚴(yán)重的錯(cuò)誤(如OOM等)源请;
Exception可以分為運(yùn)行時(shí)異常(RuntimeException及其子類(lèi))和非運(yùn)行時(shí)異常(Exception的子類(lèi)中,除了RuntimeException及其子類(lèi)之外的類(lèi))舅踪。

非運(yùn)行時(shí)異常是檢查異常(checked exceptions)良蛮,一定要try catch,因?yàn)檫@類(lèi)異常是可預(yù)料的决瞳,編譯階段就檢查的出來(lái);
Error和運(yùn)行時(shí)異常是非檢查異常(unchecked exceptions)痴颊,不需要try catch屡贺,因?yàn)檫@類(lèi)異常是不可預(yù)料的,編輯階段不會(huì)檢查甩栈,沒(méi)必要檢查,也檢查不出來(lái)玉转。

image.png

spring的@Transactional注解可以很方便的開(kāi)啟事務(wù)允蜈,但是默認(rèn)只在遇到運(yùn)行時(shí)異常和Error時(shí)才會(huì)回滾,非運(yùn)行時(shí)異常不回滾漩蟆,即Exception的子類(lèi)中妓蛮,除了RuntimeException及其子類(lèi),其他的類(lèi)默認(rèn)不回滾(不知道為什么要這樣設(shè)計(jì)蛤克?)
而rollbackFor屬性可以解決這個(gè)問(wèn)題构挤,rollbackFor = Exception.class表示Exception及其子類(lèi)的異常都會(huì)觸發(fā)回滾,同時(shí)不影響Error的回滾筋现。

image.png

下面是關(guān)于@Transactional注解的一些實(shí)驗(yàn)

實(shí)驗(yàn)一
不加rollbackFor屬性矾飞,拋出RuntimeException,正橙髀伲回滾

    @Transactional
    public void save(){
        StudentDO studentDO = new StudentDO();
        studentDO.setName("ltm");
        studentDO.setAge(22);
        studentMapper.insert(studentDO);

        throw new RuntimeException("我是異常");
    }

實(shí)驗(yàn)二
不加rollbackFor屬性,拋出IOException瞒津,不回滾

    @Transactional
    public void save() throws IOException{
        StudentDO studentDO = new StudentDO();
        studentDO.setName("ltm");
        studentDO.setAge(22);
        studentMapper.insert(studentDO);

        throw new IOException();
    }

實(shí)驗(yàn)三
加上rollbackFor = Exception.class豺型,拋出IOException,正车隽荆回滾

    @Transactional(rollbackFor = Exception.class)
    public void save() throws IOException{
        StudentDO studentDO = new StudentDO();
        studentDO.setName("ltm");
        studentDO.setAge(22);
        studentMapper.insert(studentDO);

        throw new IOException();
    }

實(shí)驗(yàn)四
不加rollbackFor屬性肴焊,拋出OutOfMemoryError,正橙⒕欤回滾

    @Transactional()
    public void save(){
        StudentDO studentDO = new StudentDO();
        studentDO.setName("ltm");
        studentDO.setAge(22);
        studentMapper.insert(studentDO);

        throw new OutOfMemoryError();
    }

實(shí)驗(yàn)五
加上rollbackFor = Exception.class届宠,拋出OutOfMemoryError乘粒,正成怂回滾,說(shuō)明rollbackFor = Exception.class不會(huì)覆蓋Error的回滾

    @Transactional(rollbackFor = Exception.class)
    public void save(){
        StudentDO studentDO = new StudentDO();
        studentDO.setName("ltm");
        studentDO.setAge(22);
        studentMapper.insert(studentDO);

        throw new OutOfMemoryError();
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旦棉,一起剝皮案震驚了整個(gè)濱河市药薯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌真屯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讨跟,死亡現(xiàn)場(chǎng)離奇詭異鄙煤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凉馆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)澜共,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锥腻,“玉大人,你說(shuō)我怎么就攤上這事瘦黑。” “怎么了幸斥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵甲葬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坡垫,道長(zhǎng),這世上最難降的妖魔是什么冰悠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任屿脐,我火速辦了婚禮宪卿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佑钾。我一直安慰自己,他們只是感情好代赁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布兽掰。 她就那樣靜靜地躺著,像睡著了一般孽尽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞻讽,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天熏挎,我揣著相機(jī)與錄音,去河邊找鬼烦磁。 笑死哼勇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猴蹂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼珍逸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了叭爱?” 一聲冷哼從身側(cè)響起漱病,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杨帽,沒(méi)想到半個(gè)月后漓穿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡注盈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年晃危,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片老客。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡僚饭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胧砰,到底是詐尸還是另有隱情鳍鸵,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布尉间,位于F島的核電站权纤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏汹想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一撤蚊、第九天 我趴在偏房一處隱蔽的房頂上張望古掏。 院中可真熱鬧,春花似錦侦啸、人聲如沸槽唾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)庞萍。三九已至,卻和暖如春忘闻,著一層夾襖步出監(jiān)牢的瞬間钝计,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留私恬,地道東北人债沮。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像本鸣,于是被迫代替她去往敵國(guó)和親疫衩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354