spring 事務(wù)管理之事務(wù)的七大傳播行為之理論

譬如朝露,去日苦多

事務(wù)傳播行為: Propagation [?pr?p?'ɡe??(?)n]

spring 給我們提供了7大傳播行為程癌;我們打開org.springframework.transaction.annotation.Propagation類源碼可以分別看到這7種:


image.png

這里提出一個(gè)概念村视,方便下面的理解

  • 調(diào)用者方法
  • 被調(diào)用者方法

事務(wù)的傳播行為指的是:當(dāng)事務(wù)方法嵌套調(diào)用時(shí)涮坐, 調(diào)用者事務(wù)被調(diào)用者事務(wù)沖突的解決方案焰雕。spring為我們提供了7種解決方案

支持調(diào)用者事務(wù)

required [r??kwa??rd]

(必須的)
這是spring默認(rèn)的事務(wù)傳播行為

  • 申明在被調(diào)用者上舵变,調(diào)用者沒有開啟事務(wù)记焊,則被調(diào)用者開啟事務(wù)逸月;調(diào)用者有開啟事務(wù),則被調(diào)用者加入調(diào)用者事務(wù)遍膜。即優(yōu)先使用調(diào)用者事務(wù),此時(shí)內(nèi)部出現(xiàn)異惩胗玻回滾會(huì)使外部調(diào)用者事務(wù)方法也回滾

  • 申明在調(diào)用者上,會(huì)創(chuàng)建新事務(wù)

就好像在公司遇到前端的樣式問題一樣瓢颅,前端在就找前端解決恩尾,不在就自己解決

@Transactional(propagation=Propagation.REQUIRED) 
supports

(支持)
本身不會(huì)創(chuàng)建事務(wù)

  • 申明在被調(diào)用者上,調(diào)用者沒有開啟事務(wù)挽懦,則被調(diào)用者方法就是一個(gè)不帶事務(wù)的方法翰意。調(diào)用者有開啟事務(wù),則被調(diào)用者加入調(diào)用者事務(wù)
  • 申明在調(diào)用者上信柿,當(dāng)前方法以非事務(wù)方式運(yùn)行

就像遇到前端問題冀偶,就把問題忽略。不去解決

@Transactional(propagation=Propagation.SUPPORTS) 
mandatory [?m?nd?t??ri]

(強(qiáng)制)
本身不會(huì)創(chuàng)建事務(wù)

  • 申明在被調(diào)用者上渔嚷,當(dāng)前方法必須使用調(diào)用者的事務(wù)进鸠,如果調(diào)用者有事務(wù),就加入形病。如果沒有就拋出IllegalTransactionStateException異常
  • 申明在調(diào)用者上堤如,報(bào)異常IllegalTransactionStateException

就像遇到了比較難以解決的前端問題。前端不在窒朋,自己也解決不了

@Transactional(propagation=Propagation.MANDATORY) 

不支持調(diào)用者事務(wù)

requires_new

(隔離)

  • 申明在被調(diào)用者上搀罢,不管調(diào)用者是否使用事務(wù)會(huì)都創(chuàng)建一個(gè)新的事務(wù),調(diào)用者中的事務(wù)掛起侥猩,等到被調(diào)用者事務(wù)執(zhí)行完畢榔至,繼續(xù)執(zhí)行調(diào)用者中的事務(wù)。一般局部數(shù)據(jù)操作一致性都用此方法欺劳。
  • 申明在調(diào)用者上唧取,會(huì)創(chuàng)建新事務(wù)
@Transactional(propagation=Propagation.REQUIRES_NEW) 
not_supported

(不支持)
本身不會(huì)創(chuàng)建事務(wù)。

  • 申明在被調(diào)用者上方法上划提。調(diào)用者事務(wù)方法調(diào)用此方法時(shí)枫弟,事務(wù)不會(huì)進(jìn)到此方法。即把外部事務(wù)掛起鹏往,直到此方法執(zhí)行完后恢復(fù)外部事務(wù)淡诗。
  • 申明在調(diào)用者上,當(dāng)前方法以非事務(wù)方式運(yùn)行
@Transactional(propagation=Propagation.NOT_SUPPORTED) 
never

(強(qiáng)制非事務(wù))
本身不會(huì)創(chuàng)建事務(wù)。

  • 申明在被調(diào)用者方法上韩容,調(diào)用者方法上使用了事務(wù)則報(bào)IllegalTransactionStateException
    異常
  • 申明在調(diào)用者上款违,當(dāng)前方法以非事務(wù)方式運(yùn)行
@Transactional(propagation=Propagation.NEVER) 

嵌套事務(wù)

nested [?nest?d]

(嵌套事務(wù))

開始一個(gè) "嵌套的" 事務(wù), 它是已經(jīng)存在事務(wù)的一個(gè)真正的子事務(wù)。嵌套事務(wù)開始執(zhí)行時(shí), 它將取得一個(gè) savepoint群凶。 如果這個(gè)嵌套事務(wù)失敗, 我們將回滾到此 savepoint插爹。嵌套事務(wù)是外部事務(wù)的一部分, 只有外部事務(wù)結(jié)束后它才會(huì)被提交。

 @Transactional(propagation= Propagation.NESTED)

我對(duì)事務(wù)傳播行為的個(gè)人理解

事務(wù)總是沿著方法的調(diào)用方向來傳播的请梢,A方法調(diào)用B方法赠尾,A方法的事務(wù)可能會(huì)傳播給B方法。不存在B方法事務(wù)傳播給A方法毅弧!具體分為下面幾種情況:

  • A創(chuàng)建了事務(wù)气嫁,并將事務(wù)傳播給B。兩者使用同一事務(wù)

  • A創(chuàng)建了事務(wù)形真,B也創(chuàng)建了事務(wù)杉编。兩者隔離執(zhí)行

  • A創(chuàng)建了事務(wù)超全,B無事務(wù)運(yùn)行

  • A無事務(wù)運(yùn)行咆霜,B創(chuàng)建事務(wù)

  • A無事務(wù)運(yùn)行,B無事務(wù)運(yùn)行

為了深入理解事務(wù)的傳播行為嘶朱,我對(duì)之做了實(shí)驗(yàn)蛾坯。這篇文章有記錄
http://www.reibang.com/p/bc3cbacf9e70

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疏遏,隨后出現(xiàn)的幾起案子脉课,更是在濱河造成了極大的恐慌,老刑警劉巖财异,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倘零,死亡現(xiàn)場離奇詭異,居然都是意外死亡戳寸,警方通過查閱死者的電腦和手機(jī)呈驶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疫鹊,“玉大人袖瞻,你說我怎么就攤上這事〔疬海” “怎么了聋迎?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枣耀。 經(jīng)常有香客問我霉晕,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任娄昆,我火速辦了婚禮佩微,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萌焰。我一直安慰自己哺眯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布扒俯。 她就那樣靜靜地躺著奶卓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撼玄。 梳的紋絲不亂的頭發(fā)上夺姑,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音掌猛,去河邊找鬼盏浙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荔茬,可吹牛的內(nèi)容都是我干的废膘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼慕蔚,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼丐黄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起孔飒,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤灌闺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后坏瞄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桂对,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年鸠匀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕉斜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狮崩,死狀恐怖蛛勉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睦柴,我是刑警寧澤诽凌,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站坦敌,受9級(jí)特大地震影響侣诵,放射性物質(zhì)發(fā)生泄漏痢法。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一杜顺、第九天 我趴在偏房一處隱蔽的房頂上張望财搁。 院中可真熱鬧,春花似錦躬络、人聲如沸尖奔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽提茁。三九已至,卻和暖如春馁菜,著一層夾襖步出監(jiān)牢的瞬間茴扁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工汪疮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峭火,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓智嚷,卻偏偏與公主長得像卖丸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纤勒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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