spring事物

1、事物屬性

事物屬性主要是通過TransactionDefinition接口實(shí)現(xiàn)定義,主要有事物的隔離級(jí)別竖独,事物的傳播性,事物的超時(shí)時(shí)間担扑,事物是否只讀

1)事物隔離級(jí)別:用來(lái)解決并發(fā)事物出現(xiàn)的問題,其使用TransactionDefinition中的靜態(tài)變量來(lái)指定:

?????????ISOLATION_DEFAULT:默認(rèn)隔離級(jí)別,即使用底層數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別;

? ? ? ? ?ISOLATION_READ_UNCOMMITTED:未提交讀烙丛;

? ? ? ? ?ISOLATION_READ_COMMITTED:提交讀,一般情況下我們使用這個(gè)羔味;

? ? ? ? ?ISOLATION_REPEATABLE_READ:可重復(fù)讀河咽;

? ? ? ? ?ISOLATION_SERIALIZABLE:序列化。

可以使用DefaultTransactionDefinition類中的setIsolationLevel方法來(lái)設(shè)計(jì)事物的隔離級(jí)別

2)事物傳播行為:spring管理的事物是邏輯事物介评,物理事物與邏輯事物兩者之間的區(qū)別就在于事物的傳播行為,事物的傳播行為指用于多個(gè)事物之間調(diào)用,事物是如何在這些方法間傳播的们陆,spring一共支持7中傳播行為:

userDao.save(user);??

?user.getAddress().setUserId(user.getId());??

?addressService.save(user.getAddress());

Required:必須有邏輯事物寒瓦,否則創(chuàng)建一個(gè)新事物PROPAGATION_REQUIRED指定,表示當(dāng)前如果有事物坪仇,則加入該事物杂腰,否則創(chuàng)建一個(gè)新事物


? ? 一.當(dāng)userService調(diào)用save()方法時(shí),此時(shí)spring用的required傳播行為并且spring事物管理器中沒有開啟邏輯事物椅文,所以spring管理器會(huì)開啟一個(gè)邏輯事物喂很;

? ? 二.當(dāng)addressService調(diào)用save()方法時(shí)發(fā)現(xiàn)同樣用的required傳播行為,因此使用已經(jīng)存在的邏輯事物

? ??三皆刺、在返回到addressService對(duì)象的save方法少辣,當(dāng)事務(wù)模板類執(zhí)行完畢,此時(shí)提交并關(guān)閉事務(wù)羡蛾。

?????? 因此userService對(duì)象的save方法和addressService的save方法屬于同一個(gè)物理事務(wù)漓帅,如果發(fā)生回滾,則兩者都回滾

RequiresNew:創(chuàng)建新的邏輯事務(wù)痴怨,使用PROPAGATION_REQUIRES_NEW指定忙干,表示每次都創(chuàng)建新的邏輯事務(wù)(物理事務(wù)也是不同的),如下圖:


該傳播行為執(zhí)行流程(正確提交情況):

一浪藻、當(dāng)執(zhí)行userService對(duì)象的save方法時(shí)捐迫,由于傳播行為是RequiresNew,因此創(chuàng)建一個(gè)新的邏輯事務(wù)(物理事務(wù)也是不同的)爱葵;

二施戴、當(dāng)執(zhí)行到addressService對(duì)象的save方法時(shí),由于傳播行為是RequiresNew钧惧,因此首先暫停上一個(gè)邏輯事務(wù)并創(chuàng)建一個(gè)新的邏輯事務(wù)(物理事務(wù)也是不同的);

三暇韧、addressService對(duì)象的save方法執(zhí)行完畢后,提交邏輯事務(wù)(并提交物理事務(wù))并重新恢復(fù)上一個(gè)邏輯事務(wù)浓瞪,繼續(xù)執(zhí)行userService對(duì)象的save方法內(nèi)的操作懈玻;

四、最后userService對(duì)象的save方法執(zhí)行完畢乾颁,提交邏輯事務(wù)(并提交物理事務(wù))涂乌;

五、userService對(duì)象的save方法和addressService對(duì)象的save方法不屬于同一個(gè)邏輯事務(wù)且也不屬于同一個(gè)物理事務(wù)英岭。

Supports:支持當(dāng)前事物湾盒,使用PROPAGATION_SUPPORTS指定,如果當(dāng)前存在邏輯事物诅妹,則加入當(dāng)前邏輯事物罚勾,如果沒有毅人,則以非事物方式提交


NotSupported:不支持事物,如果當(dāng)前存在事物則暫停該事物尖殃,使用PROPAGATION_NOT_SUPPORTED指定丈莺,以非事物方式執(zhí)行,如果當(dāng)前存在邏輯事務(wù)送丰,就把當(dāng)前事務(wù)暫停缔俄,以非事務(wù)方式執(zhí)行。


Mandatory:必須有事物器躏,否則拋出異常俐载,使用PROPAGATION_MANDATORY指定,使用當(dāng)前事物執(zhí)行登失,如果當(dāng)前沒有事物遏佣,則拋出異常。


Never:不支持事物壁畸,如果當(dāng)前有事物則拋出異常贼急,使用PROPAGATION_NEVER指定,即以非事物方式執(zhí)行捏萍,如果當(dāng)前存在事物太抓,則拋出異常。

Nested:嵌套事物支持令杈,使用PROPAGATION_NESTED指定走敌,如果當(dāng)前存在事物,則嵌套在事物內(nèi)執(zhí)行逗噩,如果當(dāng)前沒有事物掉丽,則創(chuàng)建一個(gè)新事物執(zhí)行,嵌套事物是以數(shù)據(jù)庫(kù)保存點(diǎn)來(lái)實(shí)現(xiàn)异雁,即嵌套事物回滾不會(huì)影響外部事物捶障,但外部事物回滾會(huì)影響嵌套事物。

Nested和RequiresNew的區(qū)別:

1.RequiredNew每次都是創(chuàng)建一個(gè)新的獨(dú)立的物理事物纲刀,而Nested只有一個(gè)物理事物

2.Nested嵌套事物發(fā)生回滾不會(huì)影響外部事物项炼,外部事物發(fā)生回滾會(huì)影響嵌套事物,而RequiredNew每次創(chuàng)建的都是新事物示绊,所以并沒有關(guān)聯(lián)锭部。

3.Nested使用JDBC 3的保存點(diǎn)實(shí)現(xiàn),即如果使用低版本驅(qū)動(dòng)將導(dǎo)致不支持嵌套事務(wù)面褐。

使用嵌套事務(wù)拌禾,必須確保具體事務(wù)管理器實(shí)現(xiàn)的nestedTransactionAllowed屬性為true,否則不支持嵌套事務(wù)展哭,如DataSourceTransactionManager默認(rèn)支持湃窍,而HibernateTransactionManager默認(rèn)不支持闻蛀,需要我們來(lái)開啟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末您市,一起剝皮案震驚了整個(gè)濱河市循榆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墨坚,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映挂,死亡現(xiàn)場(chǎng)離奇詭異泽篮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)柑船,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門帽撑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鞍时,你說(shuō)我怎么就攤上這事亏拉。” “怎么了逆巍?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵及塘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我锐极,道長(zhǎng)笙僚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任灵再,我火速辦了婚禮肋层,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翎迁。我一直安慰自己栋猖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布汪榔。 她就那樣靜靜地躺著蒲拉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揍异。 梳的紋絲不亂的頭發(fā)上全陨,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音衷掷,去河邊找鬼辱姨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛戚嗅,可吹牛的內(nèi)容都是我干的雨涛。 我是一名探鬼主播枢舶,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼替久!你這毒婦竟也來(lái)了凉泄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚯根,失蹤者是張志新(化名)和其女友劉穎后众,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颅拦,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒂誉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了距帅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右锨。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碌秸,靈堂內(nèi)的尸體忽然破棺而出绍移,到底是詐尸還是另有隱情,我是刑警寧澤讥电,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布蹂窖,位于F島的核電站,受9級(jí)特大地震影響恩敌,放射性物質(zhì)發(fā)生泄漏恼策。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一潮剪、第九天 我趴在偏房一處隱蔽的房頂上張望涣楷。 院中可真熱鬧,春花似錦抗碰、人聲如沸狮斗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碳褒。三九已至,卻和暖如春看疗,著一層夾襖步出監(jiān)牢的瞬間沙峻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工两芳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摔寨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓怖辆,卻偏偏與公主長(zhǎng)得像是复,于是被迫代替她去往敵國(guó)和親删顶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • 背景 Spring 默認(rèn)的事務(wù)的傳播為PROPAGATION_REQUIRED即如果當(dāng)前沒有事務(wù)淑廊,就新建一個(gè)事務(wù)逗余。...
    shawnxjf閱讀 1,149評(píng)論 0 5
  • 看到關(guān)于spring事物比較好的兩篇文章画拾,轉(zhuǎn)載過來(lái)关摇。 1.事務(wù)的定義:事務(wù)是指多個(gè)操作單元組成的合集,多個(gè)單元操作...
    Aldeo閱讀 942評(píng)論 0 8
  • 事物特性 ⑴原子性(Atomicity) 原子性是指事務(wù)包含的所有操作要么全部成功碾阁,要么全部失敗回滾,因此事務(wù)的操...
    HJJ_3c00閱讀 271評(píng)論 0 0
  • 很多人喜歡這篇文章些楣,特此同步過來(lái) 由淺入深談?wù)搒pring事務(wù) 前言 這篇其實(shí)也要?dú)w納到《常識(shí)》系列中脂凶,但這重點(diǎn)又...
    碼農(nóng)戲碼閱讀 4,739評(píng)論 2 59
  • 一、spring事物 Spring傳播事務(wù)行為類型 二:REQUIRED和REQUIRES_NEW情況說(shuō)明 1.方...
    吳世浩閱讀 893評(píng)論 0 2