Spring 事務(wù)初識(shí)(1)2018-08-22

一:事務(wù)的4個(gè)限定屬性(ACID)

1形帮、原子性(Atomic) :對(duì)數(shù)據(jù)的修改要么全部執(zhí)行槽惫,要么全部不執(zhí)行。
2辩撑、一致性(Consistent) :在事務(wù)執(zhí)行前后界斜,數(shù)據(jù)狀態(tài)保持一致性。
3合冀、隔離性(Isolated) :一個(gè)事務(wù)的處理不能影響另一個(gè)事務(wù)的處理各薇。
4、持續(xù)性(Durable) :事務(wù)處理結(jié)束君躺,其效果在數(shù)據(jù)庫(kù)中持久化峭判。

二:隔離性(Isolated)細(xì)分4個(gè)隔離級(jí)別:

1、讀未提交(read uncommitted):一個(gè)事務(wù)可以讀取另一個(gè)事2務(wù)沒(méi)有提交的數(shù)據(jù)晰洒。存在臟讀朝抖、不可重復(fù)讀、幻讀的問(wèn)題谍珊。
2治宣、讀提交(Read Committed):一個(gè)事務(wù)的操作結(jié)果只有在該事務(wù)提交之后急侥,另一個(gè)事務(wù)才能讀取到。避免另臟讀侮邀,存在不可重復(fù)讀坏怪、幻讀的問(wèn)題。
3绊茧、可重復(fù)讀(Repeatable Read):保證在一個(gè)事務(wù)中铝宵,對(duì)同一筆數(shù)據(jù)的讀取結(jié)果是相同的。避免另臟讀华畏、不可重復(fù)讀鹏秋,存在幻讀的問(wèn)題。
4亡笑、序列化讀(Serializable):所以的事務(wù)是按順序執(zhí)行的侣夷。

臟讀、不可重復(fù)讀仑乌、幻讀:
臟讀:一個(gè)事務(wù)讀取了百拓,另一個(gè)事務(wù)為提交的數(shù)據(jù)
不可重復(fù)讀:一個(gè)事務(wù)內(nèi)對(duì)同一筆數(shù)據(jù)的多次讀取結(jié)果不同,不可重復(fù)讀的重點(diǎn)是修改晰甚。
幻讀:同樣一筆查詢?cè)谡麄€(gè)事務(wù)過(guò)程中多次執(zhí)行后衙传,查詢所得的結(jié)果集是不一樣的〔蘧牛幻讀針對(duì)的是多筆記錄蓖捶。幻讀的重點(diǎn)在于新增或者刪除 (數(shù)據(jù)條數(shù)變化)

三止剖、Spring事務(wù)的主要接口:

PlatformTransactionManager:界定事務(wù)的邊界

public interface PlatformTransactionManager {
    //獲取事務(wù)
    TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws TransactionException;
    //提交
    void commit(TransactionStatus var1) throws TransactionException;
    //回滾
    void rollback(TransactionStatus var1) throws TransactionException;
}

TransactionDefinition:負(fù)責(zé)定義事務(wù)的相關(guān)屬性

public interface TransactionDefinition {
    //獲取事務(wù)傳播類型
    int getPropagationBehavior();

    //獲取事務(wù)隔離級(jí)別
    int getIsolationLevel();

    //獲取事務(wù)超時(shí)時(shí)間
    int getTimeout();

    //事務(wù)的只讀性
    boolean isReadOnly();

    //獲取事務(wù)名稱
    String getName();

}

TransactionStatus:事務(wù)開(kāi)啟之后后事務(wù)結(jié)束期間的事務(wù)狀態(tài)

public interface TransactionStatus extends SavepointManager, Flushable {
  // 是否是新的事物
    boolean isNewTransaction();
    // 是否有恢復(fù)點(diǎn)
    boolean hasSavepoint();
    //標(biāo)記回滾當(dāng)前事務(wù)
    void setRollbackOnly();
    //判斷當(dāng)前事務(wù)是不是標(biāo)記為回滾
    boolean isRollbackOnly();
    //刷新會(huì)話到數(shù)據(jù)庫(kù)
    void flush();
    // 是否已完成
    boolean isCompleted();
}

四:事務(wù)屬性:
事務(wù)的傳播屬性:

1腺阳、TransactionDefinition.PROPAGATION_REQUIRED: 如果當(dāng)前存在事務(wù),則加入該事務(wù)穿香;如果當(dāng)前沒(méi)有事務(wù),則創(chuàng)建一個(gè)新的事務(wù)绎速。

2皮获、TransactionDefinition.PROPAGATION_SUPPORTS: 如果當(dāng)前存在事務(wù),則加入該事務(wù)纹冤;如果當(dāng)前沒(méi)有事務(wù)洒宝,則以非事務(wù)的方式繼續(xù)運(yùn)行。

3萌京、TransactionDefinition.PROPAGATION_MANDATORY: 如果當(dāng)前存在事務(wù)雁歌,則加入該事務(wù);如果當(dāng)前沒(méi)有事務(wù)知残,則拋出異常靠瞎。
不支持當(dāng)前事務(wù)的情況:

4、TransactionDefinition.PROPAGATION_REQUIRES_NEW: 創(chuàng)建一個(gè)新的事務(wù),如果當(dāng)前存在事務(wù)乏盐,則把當(dāng)前事務(wù)掛起佳窑。

5、TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事務(wù)方式運(yùn)行父能,如果當(dāng)前存在事務(wù)神凑,則把當(dāng)前事務(wù)掛起。

6何吝、TransactionDefinition.PROPAGATION_NEVER: 以非事務(wù)方式運(yùn)行溉委,如果當(dāng)前存在事務(wù),則拋出異常爱榕。
其他情況:

7薛躬、TransactionDefinition.PROPAGATION_NESTED: 如果當(dāng)前存在事務(wù),則創(chuàng)建一個(gè)事務(wù)作為當(dāng)前事務(wù)的嵌套事務(wù)來(lái)運(yùn)行呆细;如果當(dāng)前沒(méi)有事務(wù)型宝,則該取值等價(jià)于TransactionDefinition.PROPAGATION_REQUIRED。

事務(wù)的隔離屬性:

1絮爷、TransactionDefinition.ISOLATION_DEFAULT: 使用后端數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別趴酣,Mysql 默認(rèn)采用的 REPEATABLE_READ隔離級(jí)別 Oracle 默認(rèn)采用的 READ_COMMITTED隔離級(jí)別.
TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔離級(jí)別,允許讀取尚未提交的數(shù)據(jù)變更坑夯,可能會(huì)導(dǎo)致臟讀岖寞、幻讀或不可重復(fù)讀

2、TransactionDefinition.ISOLATION_READ_COMMITTED: 允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù)柜蜈,可以阻止臟讀仗谆,但是幻讀或不可重復(fù)讀仍有可能發(fā)生

3、TransactionDefinition.ISOLATION_REPEATABLE_READ: 對(duì)同一字段的多次讀取結(jié)果都是一致的淑履,除非數(shù)據(jù)是被本身事務(wù)自己所修改隶垮,可以阻止臟讀和不可重復(fù)讀,但幻讀仍有可能發(fā)生秘噪。

4狸吞、TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔離級(jí)別,完全服從ACID的隔離級(jí)別指煎。所有的事務(wù)依次逐個(gè)執(zhí)行蹋偏,這樣事務(wù)之間就完全不可能產(chǎn)生干擾,也就是說(shuō)至壤,該級(jí)別可以防止臟讀威始、不可重復(fù)讀以及幻讀。但是這將嚴(yán)重影響程序的性能像街。通常情況下也不會(huì)用到該級(jí)別黎棠。

事務(wù)超時(shí)屬性(一個(gè)事務(wù)允許執(zhí)行的最長(zhǎng)時(shí)間)

所謂事務(wù)超時(shí)晋渺,就是指一個(gè)事務(wù)所允許執(zhí)行的最長(zhǎng)時(shí)間,如果超過(guò)該時(shí)間限制但事務(wù)還沒(méi)有完成葫掉,則自動(dòng)回滾事務(wù)些举。在 TransactionDefinition 中以 int 的值來(lái)表示超時(shí)時(shí)間,其單位是秒俭厚。

事務(wù)只讀屬性(對(duì)事物資源是否執(zhí)行只讀操作)

事務(wù)的只讀屬性是指户魏,對(duì)事務(wù)性資源進(jìn)行只讀操作或者是讀寫(xiě)操作。所謂事務(wù)性資源就是指那些被事務(wù)管理的資源挪挤,比如數(shù)據(jù)源叼丑、 JMS 資源,以及自定義的事務(wù)性資源等等扛门。如果確定只對(duì)事務(wù)性資源進(jìn)行只讀操作鸠信,那么我們可以將事務(wù)標(biāo)志為只讀的,以提高事務(wù)處理的性能论寨。在 TransactionDefinition 中以 boolean 類型來(lái)表示該事務(wù)是否只讀星立。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市葬凳,隨后出現(xiàn)的幾起案子绰垂,更是在濱河造成了極大的恐慌,老刑警劉巖火焰,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劲装,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昌简,警方通過(guò)查閱死者的電腦和手機(jī)占业,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纯赎,“玉大人谦疾,你說(shuō)我怎么就攤上這事≈贩瘢” “怎么了餐蔬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)佑附。 經(jīng)常有香客問(wèn)我,道長(zhǎng)仗考,這世上最難降的妖魔是什么音同? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮秃嗜,結(jié)果婚禮上权均,老公的妹妹穿的比我還像新娘顿膨。我一直安慰自己,他們只是感情好叽赊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布恋沃。 她就那樣靜靜地躺著,像睡著了一般必指。 火紅的嫁衣襯著肌膚如雪囊咏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天塔橡,我揣著相機(jī)與錄音梅割,去河邊找鬼。 笑死葛家,一個(gè)胖子當(dāng)著我的面吹牛户辞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播癞谒,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼底燎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了弹砚?” 一聲冷哼從身側(cè)響起双仍,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迅栅,沒(méi)想到半個(gè)月后殊校,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡读存,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年为流,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片让簿。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敬察,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尔当,到底是詐尸還是另有隱情莲祸,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布椭迎,位于F島的核電站锐帜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏畜号。R本人自食惡果不足惜缴阎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望简软。 院中可真熱鬧蛮拔,春花似錦述暂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肛跌,卻和暖如春艺配,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惋砂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工妒挎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人西饵。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓酝掩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親眷柔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子期虾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 很多人喜歡這篇文章,特此同步過(guò)來(lái) 由淺入深談?wù)搒pring事務(wù) 前言 這篇其實(shí)也要?dú)w納到《常識(shí)》系列中驯嘱,但這重點(diǎn)又...
    碼農(nóng)戲碼閱讀 4,706評(píng)論 2 59
  • 事務(wù): 事務(wù)是邏輯上的一組操作镶苞,要么都執(zhí)行,要么都不執(zhí)行鞠评。 事物的特性:(ACID) 原子性: 事務(wù)是最小的執(zhí)行單...
    n油炸小朋友閱讀 432評(píng)論 1 1
  • 事務(wù)有四個(gè)特性:ACID 原子性(Atomicity):事務(wù)是一個(gè)原子操作茂蚓,由一系列動(dòng)作組成。事務(wù)的原子性確保動(dòng)作...
    jiangmo閱讀 1,224評(píng)論 0 7
  • 概要:2Spring事務(wù)管理接口(隔離級(jí)別剃幌,傳播行為)聋涨、3接口介紹、4回滾原理 Spring事務(wù)的本質(zhì)其實(shí)就是數(shù)據(jù)...
    hedgehog1112閱讀 665評(píng)論 0 0
  • 青長(zhǎng)大了负乡,不再像以前那樣粘我了牍白,我現(xiàn)在早已習(xí)慣了她的存在,仿佛抖棘,我們生下來(lái)就認(rèn)識(shí)一般茂腥。早晨的第一束陽(yáng)光透過(guò)...
    松鼠君的草藥包閱讀 222評(píng)論 0 0