<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Denis's Java Library

    The only documentation is the code itself

    對spring事務類型詳解的一點補充(關于嵌套事務)

  • PROPAGATION_REQUIRED--支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
  • PROPAGATION_SUPPORTS--支持當前事務,如果當前沒有事務,就以非事務方式執行。
  • PROPAGATION_MANDATORY--支持當前事務,如果當前沒有事務,就拋出異常。
  • PROPAGATION_REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。
  • PROPAGATION_NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
  • PROPAGATION_NEVER--以非事務方式執行,如果當前存在事務,則拋出異常。

    可能大家對PROPAGATION_NESTED還不怎么了解,覺得有必要再補充一下^_^!
     PROPAGATION_NESTED: 嵌套事務類型,是相對上面提到的六種情況(上面的六種應該稱為平面事務類型),打個比方我現在有一個事務主要有一下幾部分:
    1,從A用戶帳戶里面減去100元錢
    2,往B用戶帳戶里面添加100元錢

    這樣看和以前不同的事務可能沒有什么區別,那我現在有點特殊的要求就是,A用戶有3個帳戶,B用戶有2個帳戶,現在我的要求就是只要再A用戶的3個帳戶里面任意一個減去100元,往B用戶的兩個帳戶中任意一個里面增加100元就可以了!

    一旦你有這樣的要求那嵌套事務類型就非常適合你!我們可以這樣理解,

    一:將“從A用戶帳戶里面減去100元錢” 和 “往B用戶帳戶里面增加100元錢”我們暫時認為是一級事務操作

    二:將從A用戶的3個帳戶的任意一個帳戶里面減錢看做是“從A用戶帳戶里面減去100元錢”這個一級事務的子事務(二級事務),同樣把后面存錢的看成是另一個的二級事務。

    問題一:當二級事務被rollback一級事務會不會被rollback?

    答案是不會的,二級事務的rollback只針對自己。

    問題二:什么時候這個一級事務會commit,什么時候會被rollback呢?

    我們主要看二級里面出現的情況,當所有的二級事務被commit了并且一級事務沒有失敗的操作,那整個事務就算是一個成功的事務,這種情況整個事務會被commit。

    當任意一個二級事務沒有被commit那整個事務就是失敗的,整個事務會被roolback。

    還是拿上面的例子來說明吧!如果我在a的三個帳戶里面減錢的操作都被二級事務給rollback了,也就是3個帳戶里面都沒有減錢成功,整個事務就失敗了就會被rollback。如果A用戶帳戶三個帳戶里面有一個可以扣錢而且B用戶的兩個帳戶里面也有一個帳戶可以增加錢,那整個事務就算成功的,會被 commit。

    看了一下覺得上面的例子好像不是很深刻,看這個情況(A用戶的3個帳戶都是有信用額度的,也就是說可以超支,但是超支有金額限制)。不過原理是一樣的,簡單點也好說明一點,祝你好運!^_^
  • posted on 2005-12-19 16:02 DenisLing 閱讀(3220) 評論(5)  編輯  收藏

    評論

    # re: 對spring事務類型詳解的一點補充(關于嵌套事務) 2005-12-28 14:08 chunjie

    答案是不會的,二級事務的rollback只針對自己。
    ------------------------------------------------
    但你下文中也說了:二級事務的rollback最終會使整個事務rollback啊. 該怎么理解你上面這句話?

      回復  更多評論   

    # re: 對spring事務類型詳解的一點補充(關于嵌套事務) 2005-12-28 14:11 chunjie

    如你的例子, 在兩個二級事務中, 若取錢的成功了,而在存入的時候rollback了,這時整個transaction會被rollback,如此,在取錢這個二級的會被rollback嗎?

    回答若'Y', 這和放在一個事務中有啥區別呢?   回復  更多評論   

    # re: 對spring事務類型詳解的一點補充(關于嵌套事務) 2005-12-28 22:19 DenisLing

    上面的朋友可能沒有理解我的意思!我的例子可能有點問題!
    其實這有一個經典的旅行定票的問題!

    比如我要到臺灣旅游,我可能要如下去做
    1,買到上海的汽車票,
    2,在上海買去香港的飛機票,
    3,在香港買去臺灣的飛機票,
    4,買到目的旅游地的汽車票。

    ok!現在就討論上面的問題,如果把整個過程看成是一個完成的事務,在以前的六種事務模型里面比如在第4步的時候沒有能夠買到到目的旅游地的汽車票,整個事務會回滾。
    但是我們可能在第4步的時候還可以選擇做地鐵或打的等等。這也就是嵌套事務類型和上面的不同地方,可以把1,2,3,4分別看成是一個子事務,比如1的時候我沒有買到汽車票,可能我這個買汽車票的事務會回滾,但是這并步影響外面的事務,可們可以選擇做火車等等其它途徑。如果1最后沒有能夠提交事務,那么總的事務會回滾,(但是在1事務回滾的時候并不會導致外層事務回滾)。其他幾步都是一樣的道理。

    不知道這個例子是否明白點!有問題我們再討論!  回復  更多評論   

    # re: 對spring事務類型詳解的一點補充(關于嵌套事務) 2007-06-29 01:18 javafox

    上面的說法完全看不懂 就本人的理解在SRING默認的回滾規則下 在2級事務中如果回滾了數據但是沒有拋出異常 1級事務還是回繼續執行后面的2級事務 如果2級事務在回滾過程中拋出了異常 那么1級事務也馬上回滾 但是如果前面的2級事務如果已經提交了 那么就算后面的2級事務回滾并拋出異常也只會導致1級事務回滾 前面已經提交的2級事務不能回滾了 (因為就我知道的程序是不能回滾已經提交的 只能通過數據庫系統日志恢復了)   回復  更多評論   

    # re: 對spring事務類型詳解的一點補充(關于嵌套事務)[未登錄] 2009-05-12 14:35 spring

    @javafox

    你兩說的好像是一樣的  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 美女视频黄免费亚洲| 国产成人无码区免费内射一片色欲 | 日本中文字幕免费高清视频| 亚洲成a人一区二区三区| 国产精品亚洲二区在线| 亚洲日本视频在线观看| 又大又硬又爽又粗又快的视频免费| 亚洲国产综合91精品麻豆| 亚洲一级毛片免费看| 亚洲男人在线无码视频| 中文日本免费高清| 亚洲av日韩av无码黑人| 免费观看国产网址你懂的| 波多野结衣亚洲一级| 免费一级毛片在线播放| 在线观看免费播放av片| 亚洲欧洲日产专区| 国产精品成人四虎免费视频| 无码日韩人妻AV一区免费l| 亚洲国产精品无码久久久秋霞2 | 亚洲视频一区在线播放| 久久午夜免费视频| 国产成人亚洲综合a∨| 亚洲色婷婷综合久久| 日本免费xxxx| 国产精品亚洲天堂| 亚洲AV无码不卡在线播放| 黄页网站免费在线观看| 成人特级毛片69免费观看| 亚洲午夜精品久久久久久人妖| 最近的免费中文字幕视频 | 国产免费爽爽视频在线观看| 亚洲理论片中文字幕电影| 日韩在线天堂免费观看| 久久免费视频网站| 亚洲а∨精品天堂在线| 中文字幕精品亚洲无线码一区| 99视频全部免费精品全部四虎| 午夜在线亚洲男人午在线| 亚洲高清美女一区二区三区| 免费国产人做人视频在线观看|