帶你讀懂Spring 事務——認識事務

帶你讀懂Spring事務的第一篇,我們先來了解什么是事務, 使用生動的栗子幫你對事務的概念和特性進行理解

一、什么是事務?

事務是恢復和并發(fā)控制的基本單位敏弃,一個事務包含了聲明該事務開始到聲明該事務結束之間的所有操作笛辟。

舉個栗子:郝大(錘子的一個朋友)向錘子轉賬10元錢,我們將這個操作命名為“事務A",描述如下:
1.begin transaction for 事務A;
2.從郝大賬戶扣除10元錢;
3.向錘子賬戶增加10元錢;
4.end transaction for 事務A;

我們在編程中常說的事務實際上都是對數(shù)據(jù)庫的一系列操作的集合宫患,其實在關系型數(shù)據(jù)庫中一條SQL就是一個事務刊懈,但在編寫一些復雜業(yè)務邏輯時,往往一條sql語句并不能滿足我們的要求娃闲,這時我們就需要把一系列操作組合在一起虚汛,然后聲明一個事務將這一系列操作包裹起來,這樣這一系列的操作就成為了我們的一個新的事務

二皇帮、事務的ACID特性

  • 原子性:事務是一個原子操作卷哩,原子性保證了組成事務的一系列操作要么全部完成,要么完全不起作用属拾。

郝大給錘子轉賬10元:郝大賬戶扣除10元和錘子賬戶增加10元将谊,原子性保證了這兩個操作,要么都完成捌年,要么都不起作用瓢娜,不會出現(xiàn),操作1(郝大賬戶扣除10元)成功而操作2(錘子賬戶增加10元)失敗礼预,這樣錢就憑空消失了

  • 一致性:一旦事務完成(無論成功還是失斆呃),系統(tǒng)的狀態(tài)都是從一個一致狀態(tài)轉換到另一個一致狀態(tài),不會出現(xiàn)中間狀態(tài)褒颈。

郝大給錘子轉賬10元柒巫,假設郝大賬戶有100元,錘子賬戶有20元:初始狀態(tài)(郝大賬戶100元谷丸,錘子賬戶50元)堡掏,結束狀態(tài)(郝大賬戶90元,錘子賬戶60元)刨疼,無論事務成功與否泉唁,系統(tǒng)的狀態(tài)要么維持初始狀態(tài)(失敗)揩慕,要么轉變?yōu)榻Y束狀態(tài)(成功)亭畜,不會出現(xiàn)中間狀態(tài)(eg:郝大賬戶90元,錘子賬戶50元)迎卤,一致性和原子性密切相關的一個特性拴鸵。

  • 隔離性:一個事務的執(zhí)行不能被其他事務干擾,也就是一個事務內(nèi)部的操作對并發(fā)的其他事務而言是隔離的蜗搔,并發(fā)執(zhí)行的各個事務之間不會相互干擾劲藐。

郝大給錘子轉賬10元是一個事務A,同時并發(fā)執(zhí)行的張三給李四轉賬20元是另一個事務B樟凄,這兩個事務在執(zhí)行的時候是相互隔離聘芜,事務A執(zhí)行的成功與否不會影響事務B,同理事務B對A也是如此不同。
這時你是否會有疑惑厉膀,如果兩個事務操作的是同一份數(shù)據(jù),那么并發(fā)執(zhí)行二拐,數(shù)據(jù)豈不是亂了服鹅?其實這個跟事務的隔離級別有關系,設置不同的事務隔離級別會改變事務的實際執(zhí)行過程百新,在設置事務隔離級別為最高隔離級別時企软,當兩個并發(fā)事務操作同一份數(shù)據(jù)時,在真正執(zhí)行時兩個事務就成串行執(zhí)行了饭望,即事務A執(zhí)行完事務B才會執(zhí)行仗哨,就可以避免影響數(shù)據(jù)安全的問題發(fā)生。當然如果所有的事務的隔離級別都設置為最高隔離級別就會使得所有的事務串行執(zhí)行铅辞,也就會降低效率厌漂,所以事務的隔離基本設置是要因業(yè)務不同而異。關于事務隔離級別我會專門寫一篇文章詳細講解斟珊,歡迎關注

  • 持久性指一個事務一旦提交苇倡,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是永久性的,不會因為之后該事務之外的操作對其影響

郝大給錘子轉賬10元這個事務一旦執(zhí)行成功提交后,數(shù)據(jù)庫的狀態(tài)就變?yōu)楹麓筚~戶90元旨椒,錘子賬戶60元晓褪,這個結果是持久化到數(shù)據(jù)庫的,就會一直存下去综慎,不會因為后續(xù)的其他問題導致數(shù)據(jù)變化

三涣仿、Spring事務的管理方式

在Spring中的事務主要有兩種管理方式:編程式事務管理和聲明式事務管理

編程式事務

編程式事務是使用TransactionTemplate或者PlatformTransactionManager來進行事務實現(xiàn)。

編程式事務的意思就是你在編程的時候需要在代碼中顯式的調(diào)用事務的處理方法示惊。

舉個栗子:郝大給錘子轉賬10元的操作使用編程式事務的偽代碼描述如下


begin Transaction();
try{  
    郝大賬戶扣除10元;  
    錘子賬戶增加10元;
    commit();  //事務成功執(zhí)行則提交事務
}catch(Exection e){
    rollback(); //事務執(zhí)行異常好港,則回退
}
end Transaction();

聲明式事務

聲明式事務是建立在Spring AOP之上的,使用AOP對目標方法進行攔截米罚,在目標方法開始之前創(chuàng)建或者加入一個事務媚狰,在執(zhí)行完目標方法之后根據(jù)執(zhí)行情況提交事務或者回滾事務。

聲明式事務的優(yōu)點就是不需要主動在編程的代碼中編寫事務相關的代碼方法阔拳,只需在配置文件中制定相關的事務規(guī)則聲明或者通過基于@Transactional注解的方式進行事務的聲明。

舉個栗子:郝大給錘子轉賬10元的操作使用聲明式事務的偽代碼描述如下


//使用注解聲明事務(事務的傳播機制类嗤,后續(xù)文章會詳細講解和演示)
@Transactional(事務傳播機制)
method(){
    郝大賬戶扣除10元;  
    錘子賬戶增加10元;
}

文章歡迎轉載糊肠,轉載請注明出處,個人公眾號【愛做夢的錘子】遗锣,全網(wǎng)同id货裹,個站 http://te-amo.site,歡迎關注精偿,里面會分享更多有用知識弧圆,還有我的私密照片

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笔咽,隨后出現(xiàn)的幾起案子搔预,更是在濱河造成了極大的恐慌,老刑警劉巖叶组,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拯田,死亡現(xiàn)場離奇詭異,居然都是意外死亡甩十,警方通過查閱死者的電腦和手機船庇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侣监,“玉大人鸭轮,你說我怎么就攤上這事¢厦梗” “怎么了窃爷?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我吞鸭,道長寺董,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任刻剥,我火速辦了婚禮遮咖,結果婚禮上,老公的妹妹穿的比我還像新娘造虏。我一直安慰自己御吞,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布漓藕。 她就那樣靜靜地躺著陶珠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪享钞。 梳的紋絲不亂的頭發(fā)上揍诽,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音栗竖,去河邊找鬼暑脆。 笑死,一個胖子當著我的面吹牛狐肢,可吹牛的內(nèi)容都是我干的添吗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼份名,長吁一口氣:“原來是場噩夢啊……” “哼碟联!你這毒婦竟也來了?” 一聲冷哼從身側響起僵腺,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鲤孵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辰如,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裤纹,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年丧没,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹰椒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡呕童,死狀恐怖漆际,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夺饲,我是刑警寧澤锄贼,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站枢赔,受9級特大地震影響蒿叠,放射性物質(zhì)發(fā)生泄漏艾帐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧听哭,春花似錦、人聲如沸塘雳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽败明。三九已至隘马,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妻顶,已是汗流浹背酸员。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讳嘱,地道東北人沸呐。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像呢燥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寓娩,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348