大家好彼哼,我是IT修真院深圳分院java第4期學(xué)員顷牌,一枚正直善良的java程序員。今天給大家分享一下,簡(jiǎn)單的spring事務(wù)玲昧。
1.背景介紹
轉(zhuǎn)賬的案例
理解事務(wù)之前栖茉,先講一個(gè)你日常生活中最常干的事:轉(zhuǎn)賬。
張三給李四轉(zhuǎn)賬100元孵延。那數(shù)據(jù)庫(kù)假設(shè)需要 張三扣100吕漂,李四加100,記錄一條流水隙袁。
如果流水沒(méi)記錄成功痰娱,那整體回滾,張三也沒(méi)轉(zhuǎn)賬成功菩收,李四也沒(méi)多錢梨睁。
事務(wù)就是用來(lái)解決類似問(wèn)題的。
事務(wù)是一系列的動(dòng)作娜饵,它們綜合在一起才是一個(gè)完整的工作單元坡贺,這些動(dòng)作必須全部完成,如果有一個(gè)失敗的話箱舞,那么事務(wù)就會(huì)回滾到最開(kāi)始的狀態(tài)遍坟,仿佛什么都沒(méi)發(fā)生過(guò)一樣。
在企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā)中晴股,事務(wù)管理必不可少的技術(shù)愿伴,用來(lái)確保數(shù)據(jù)的完整性和一致性。
2.知識(shí)剖析
事務(wù)有四個(gè)特性:ACID
原子性(Atomicity):事務(wù)是一個(gè)原子操作电湘,由一系列動(dòng)作組成延曙。
事務(wù)的原子性確保動(dòng)作要么全部完成廓八,要么完全不起作用茂装。
一致性(Consistency):一旦事務(wù)完成(不管成功還是失斅准),系統(tǒng)必須確保它所建模的業(yè)務(wù)處于一致的狀態(tài)贷痪,
而不會(huì)是部分完成部分失敗幻妓。在現(xiàn)實(shí)中的數(shù)據(jù)不應(yīng)該被破壞。
隔離性(Isolation):可能有許多事務(wù)會(huì)同時(shí)處理相同的數(shù)據(jù)劫拢,因此每個(gè)事務(wù)都應(yīng)該與其他事務(wù)隔離開(kāi)來(lái)肉津,防止數(shù)據(jù)損壞。
持久性(Durability):一旦事務(wù)完成舱沧,無(wú)論發(fā)生什么系統(tǒng)錯(cuò)誤妹沙,它的結(jié)果都不應(yīng)該受到影響,這樣就能從任何系統(tǒng)崩潰中恢復(fù)過(guò)來(lái)狗唉。通常情況下,事務(wù)的結(jié)果被寫到持久化存儲(chǔ)器中涡真。
事務(wù)傳播行為
事務(wù)規(guī)則也就是事務(wù)傳播行為分俯,用于解決業(yè)務(wù)層方法之間的相互調(diào)用的問(wèn)題
常見(jiàn)的事務(wù)傳播行為
REQUIRED:
表示當(dāng)前方法必須運(yùn)行在一個(gè)事物環(huán)境中肾筐,如果一個(gè)現(xiàn)有的事物正在運(yùn)行,該方法將運(yùn)行在這個(gè)事務(wù)中缸剪,否則吗铐,就要開(kāi)始一個(gè)新的事務(wù)
REQUIRESNEW
表示當(dāng)前方法必須運(yùn)行在自己的事務(wù)里
SUPPORTS
表示當(dāng)前方法不需要事務(wù)處理環(huán)境,但如果有一個(gè)事務(wù)正在運(yùn)行的話杏节,則這個(gè)方法也可以運(yùn)行在這個(gè)事務(wù)中
MANDATORY
表示當(dāng)前方法必須運(yùn)行在一個(gè)事務(wù)上下文中唬渗,否則就拋出異常
NEVER
表示當(dāng)前方法不應(yīng)該運(yùn)行在一個(gè)事務(wù)上下文中,否則就拋出異常
3.常見(jiàn)問(wèn)題
有哪些方式實(shí)現(xiàn)事務(wù)管理
4.解決方案
Spring 事務(wù)管理有兩種方式
一種是編程式事務(wù)管理奋渔,即通過(guò)編寫代碼實(shí)現(xiàn)事物管理镊逝,
包括定義事務(wù)的開(kāi)始,程序正常執(zhí)行后的事物提交嫉鲸,異常時(shí)進(jìn)行的事務(wù)回滾撑蒜。
另一種是基于AOP技術(shù)實(shí)現(xiàn)的聲明式事務(wù)管理
其主要思想是將事務(wù)管理作為一個(gè)“切面”代碼單獨(dú)編寫,我們只用關(guān)心核心業(yè)務(wù)邏輯代碼玄渗,然后通過(guò)AOP技術(shù)將事務(wù)管理的“切面”代碼織入到業(yè)務(wù)類中
聲明式事務(wù)管理有包括基于AOP方式的事務(wù)管理和基于 @Transactional注解方式的事務(wù)管理
聲明式事務(wù)管理極大的簡(jiǎn)化了編程式事務(wù)管理的操作流程座菠,不再需要重復(fù)地執(zhí)行定義事物的開(kāi)始,
程序正常執(zhí)行后事務(wù)提交藤树,異常時(shí)進(jìn)行事物回滾這些繁瑣的操作,
而基于 @Transactional注解的聲明式事務(wù)又進(jìn)一步簡(jiǎn)化了基于AOP的事務(wù)管理浴滴,減少了Spring配置代碼。
聲明式事務(wù)的缺點(diǎn)在于只能作用到方法級(jí)別岁钓,無(wú)法做到像編程式事務(wù)那樣能控制到代碼塊級(jí)別升略。
5.編碼實(shí)戰(zhàn)
。甜紫。降宅。
6.擴(kuò)展思考
。囚霸。腰根。
7.參考文獻(xiàn)
8.更多討論
PPT鏈接:戳這里
騰訊視頻:戳這里
今天的分享就到這里啦,歡迎大家點(diǎn)贊拓型、轉(zhuǎn)發(fā)额嘿、留言、拍磚~
技能樹(shù)劣挫。IT修真學(xué)院
“我們相信人人都可以成為一個(gè)工程師册养,現(xiàn)在開(kāi)始,找個(gè)師兄压固,帶你入門球拦,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷茫”坎炼。
這里是技能樹(shù).IT修真院愧膀,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化谣光,成長(zhǎng)可見(jiàn)化檩淋,師兄1對(duì)1免費(fèi)指導(dǎo)√呀穑快來(lái)與我一起學(xué)習(xí)吧~