spring事務(wù)之注解形式(二)

說明

前一篇文字《spring事務(wù)之注解形式(一)》發(fā)現(xiàn)只是測(cè)試了情況,并且異常時(shí)屬于RunTimeException的,所以造成我以為加了這個(gè)“@Transactional(readOnly = false, propagation = Propagation.REQUIRED”,就以為所有的都會(huì)回滾,但是我們得代碼里面不一樣,代碼里面是自定義了異常,并且這個(gè)異常集成Exception的,所以經(jīng)過測(cè)試,如果是這樣是不會(huì)回滾的,最后網(wǎng)上搜了看看,并結(jié)合實(shí)際測(cè)試,還是有點(diǎn)理解,所以這篇屬于經(jīng)驗(yàn)之談,哈哈,最后要弄清源碼層次的。

一:拋出Exception異常,情況如下

@Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor=Exception.class)
    public void testException(ParamBean pb) throws Exception {
        personInfoSerivice.updateLoginNameException(pb);
    }
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public int updateLoginNameException(ParamBean pb) throws Exception {
        Map<String, Object> paramMap = pb.getParamMap();
        int i = personInfoMapper.updateLoginName(paramMap);
        try{
            System.out.println(10/0);
        }catch(Exception e){
            throw new Exception();
        }
        return i;
    }

1.如果不加rollbackFor=Exception.class,那么此次更新將不會(huì)回滾;如果加上則會(huì)進(jìn)行回滾操作。
2.1.如果加rollbackFor=Exception.class,此次更新則會(huì)進(jìn)行回滾操作。

    @Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor=Exception.class)
    public void testExceptionForTwo(ParamMap pb) throws Exception {
        System.out.println("---------------------");
                personInfoSerivice.updatePerson(pb);
        personInfoSerivice.updateLoginNameException(pb);
    }
    
    
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor=Exception.class)
    public int updateLoginNameException(ParamMap pb) throws Exception {
        Map<String, Object> paramMap = pb.getParanMap();
        int i = personInfoMapper.updateLoginName(headMap);
        try{
            System.out.println(10/0);
        }catch(Exception e){
            e.printStackTrace();
            throw new Exception();
        }
        return i;
    }
    
    @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW,,rollbackFor=Exception.class)
    public int updatePerson(EngineBean pb) {
        Map<String, Object> headMap = pb.getHeadMap();
        headMap.put("mobile", "86"+headMap.get("mobileNo"));
        int i = personInfoMapper.updatePerson(headMap);
        return i;
    }

1.1如上代碼結(jié)果:
如果兩個(gè)都是一個(gè)是REQUIRES_NEW,updatePerson會(huì)執(zhí)行成功,但是updateLoginNameException會(huì)進(jìn)行回滾操作;
分析:因?yàn)閡pdatePerson中沒有異常拋出,并且是一個(gè)新的事物,所以在updateLoginNameException中拋出異常也不會(huì)影響到updatePerson的回滾。所以如果updateLoginNameException中try...catch沒有拋出異常,則其也會(huì)執(zhí)行成功。
1.2對(duì)于上述代碼其存在的情況:

1:判斷是否是同一個(gè)事物;
2:判斷是否有try...catch異常,try完有沒有拋出異常;如果捕獲了異常,但是沒有拋出異常,相當(dāng)于該方法中沒有異常;如果捕獲到了異常,但是拋出了異常,那么就需要進(jìn)行異常回滾。

二:拋出RunTimeException默認(rèn)會(huì)回滾

比如之前拋出的10/0的異常:
java.lang.ArithmeticException: / by zero屬于運(yùn)行時(shí)異常
對(duì)之前的一篇文章中<a href="http://www.lxweimin.com/p/a4137cf46e65">spring事務(wù)之注解形式(一)</a>,拋出的都是運(yùn)行時(shí)異常,對(duì)于運(yùn)行時(shí)異常,加了事物注解,spring會(huì)默認(rèn)進(jìn)行回滾操作.spring文檔中有說明如下:

Transaction_Image.png

看RunTimeException那段意思是:
Spring框架的事務(wù)基礎(chǔ)架構(gòu)代碼將默認(rèn)地 在拋出運(yùn)行時(shí)和unchecked exceptions時(shí)才標(biāo)識(shí)事務(wù)回滾。 也就是說,當(dāng)拋出一個(gè) RuntimeException
或其子類例的實(shí)例時(shí)。(Errors
也一樣 - 默認(rèn)地 - 標(biāo)識(shí)事務(wù)回滾。)從事務(wù)方法中拋出的Checked exceptions將 被標(biāo)識(shí)進(jìn)行事務(wù)回滾。

異常

Exception_Image.png

異常其實(shí)分unchecked exceptionschecked exceptions,我們主要關(guān)注unchecked的異常,對(duì)于unchecked的異常又分"運(yùn)行時(shí)異常"和“非運(yùn)行時(shí)異常”,網(wǎng)上看見了一片文章覺得很贊,<a >深入理解java異常處理機(jī)制</a>;先借鑒下,后面看看自己也總結(jié)下自己的理解,哈哈。

NEXT

昨天下班后跟今天早上來公司加班,又專門的來測(cè)試了幾種情況,主要還是要看上面所說的,是否是同一個(gè)事物,有沒有進(jìn)行異常捕獲,捕獲后有沒有拋出都會(huì)影響事物的回滾等。之前也是一直都只是會(huì)用,使用xml形式的方式,這次使用注解,才有點(diǎn)深入的理解了些,但是還不夠,底層的源碼部分還是沒有理解,現(xiàn)在只是理解了注解形式的配置而已,所以下面還有深入的分析,希望自己能搞定這種源碼理解,最后,你會(huì)發(fā)現(xiàn),只有自己嘗試做過,遇到的東西才會(huì)理解的更深刻。

浩語

                                                       __                                                        
                                         __  _  ____ __|  |__ _____    ___
                                         \ \/ \/ /  |  \  |  \\__  \  /  _ \   
                                          \     /|  |  /   Y  \/ __ \(  <_> )
                                           \/\_/ |____/|___|  (____  /\____/ 
                                                            \/     \/          
                              走在自己的路上,遇到要遇到的人,經(jīng)歷要經(jīng)歷的事,這才是我們需要面對(duì)的。
                                                       
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,237評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,957評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,248評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,356評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,081評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,485評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,534評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,720評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,263評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,025評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,204評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,787評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,461評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,874評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,105評(píng)論 1 289
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,945評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,205評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容