對(duì)spring事務(wù)類型詳解的一點(diǎn)補(bǔ)充(關(guān)于嵌套事務(wù))
可能大家對(duì)PROPAGATION_NESTED還不怎么了解,覺得有必要再補(bǔ)充一下^_^!
PROPAGATION_NESTED: 嵌套事務(wù)類型,是相對(duì)上面提到的六種情況(上面的六種應(yīng)該稱為平面事務(wù)類型),打個(gè)比方我現(xiàn)在有一個(gè)事務(wù)主要有一下幾部分:
1,從A用戶帳戶里面減去100元錢
2,往B用戶帳戶里面添加100元錢
這樣看和以前不同的事務(wù)可能沒有什么區(qū)別,那我現(xiàn)在有點(diǎn)特殊的要求就是,A用戶有3個(gè)帳戶,B用戶有2個(gè)帳戶,現(xiàn)在我的要求就是只要再A用戶的3個(gè)帳戶里面任意一個(gè)減去100元,往B用戶的兩個(gè)帳戶中任意一個(gè)里面增加100元就可以了!
一旦你有這樣的要求那嵌套事務(wù)類型就非常適合你!我們可以這樣理解,
一:將“從A用戶帳戶里面減去100元錢” 和 “往B用戶帳戶里面增加100元錢”我們暫時(shí)認(rèn)為是一級(jí)事務(wù)操作
二:將從A用戶的3個(gè)帳戶的任意一個(gè)帳戶里面減錢看做是“從A用戶帳戶里面減去100元錢”這個(gè)一級(jí)事務(wù)的子事務(wù)(二級(jí)事務(wù)),同樣把后面存錢的看成是另一個(gè)的二級(jí)事務(wù)。
問(wèn)題一:當(dāng)二級(jí)事務(wù)被rollback一級(jí)事務(wù)會(huì)不會(huì)被rollback?
答案是不會(huì)的,二級(jí)事務(wù)的rollback只針對(duì)自己。
問(wèn)題二:什么時(shí)候這個(gè)一級(jí)事務(wù)會(huì)commit,什么時(shí)候會(huì)被rollback呢?
我們主要看二級(jí)里面出現(xiàn)的情況,當(dāng)所有的二級(jí)事務(wù)被commit了并且一級(jí)事務(wù)沒有失敗的操作,那整個(gè)事務(wù)就算是一個(gè)成功的事務(wù),這種情況整個(gè)事務(wù)會(huì)被commit。
當(dāng)任意一個(gè)二級(jí)事務(wù)沒有被commit那整個(gè)事務(wù)就是失敗的,整個(gè)事務(wù)會(huì)被roolback。
還是拿上面的例子來(lái)說(shuō)明吧!如果我在a的三個(gè)帳戶里面減錢的操作都被二級(jí)事務(wù)給rollback了,也就是3個(gè)帳戶里面都沒有減錢成功,整個(gè)事務(wù)就失敗了就會(huì)被rollback。如果A用戶帳戶三個(gè)帳戶里面有一個(gè)可以扣錢而且B用戶的兩個(gè)帳戶里面也有一個(gè)帳戶可以增加錢,那整個(gè)事務(wù)就算成功的,會(huì)被 commit。
看了一下覺得上面的例子好像不是很深刻,看這個(gè)情況(A用戶的3個(gè)帳戶都是有信用額度的,也就是說(shuō)可以超支,但是超支有金額限制)。不過(guò)原理是一樣的,簡(jiǎn)單點(diǎn)也好說(shuō)明一點(diǎn),祝你好運(yùn)!^_^
posted on 2005-12-19 16:02 DenisLing 閱讀(3223) 評(píng)論(5) 編輯 收藏