事務基礎知識

一脊框、什么是事務颁督?

? ? ? ? ?是數(shù)據(jù)庫操作的最小工作單元,是作為單個邏輯工作單元執(zhí)行的一系列操作浇雹;這些操作作為一個整體一起向系統(tǒng)提交沉御,要么都執(zhí)行、要么都不執(zhí)行昭灵;事務是一組不可再分割的操作集合(工作邏輯單元)吠裆;?

二、事務的四大特性

1 虎锚、原子性

? ? 事務是數(shù)據(jù)庫的邏輯工作單位硫痰,事務中包含的各操作要么都做,要么都不做

2 窜护、一致性

? ? ? ?事 務執(zhí)行的結果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)效斑。因此當數(shù)據(jù)庫只包含成功事務提交的結果時,就說數(shù)據(jù)庫處于一致性狀態(tài)柱徙。如果數(shù)據(jù)庫系統(tǒng) 運行中發(fā)生故障缓屠,有些事務尚未完成就被迫中斷奇昙,這些未完成事務對數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這時數(shù)據(jù)庫就處于一種不正確的狀態(tài)敌完,或者說是 不一致的狀態(tài)储耐。

3 、隔離性

? ? ? ?一個事務的執(zhí)行不能其它事務干擾滨溉。即一個事務內部的操作及使用的數(shù)據(jù)對其它并發(fā)事務是隔離的什湘,并發(fā)執(zhí)行的各個事務之間不能互相干擾。

4 晦攒、持續(xù)性

? ? ? ?也稱永久性闽撤,指一個事務一旦提交,它對數(shù)據(jù)庫中的數(shù)據(jù)的改變就應該是永久性的脯颜。接下來的其它操作或故障不應該對其執(zhí)行結果有任何影響哟旗。

三、Spring事務的配置方式

? ? ? Spring支持編程式事務管理以及聲明式事務管理兩種方式栋操。

1. 編程式事務管理

? ? ? 編程式事務管理是侵入性事務管理闸餐,使用TransactionTemplate或者直接使用PlatformTransactionManager,對于編程式事務管理矾芙,Spring推薦使用TransactionTemplate舍沙。

2. 聲明式事務管理

? ? ? 聲明式事務管理建立在AOP之上,其本質是對方法前后進行攔截蠕啄,然后在目標方法開始之前創(chuàng)建或者加入一個事務场勤,執(zhí)行完目標方法之后根據(jù)執(zhí)行的情況提交或者回滾。

? ? ? 編程式事務每次實現(xiàn)都要單獨實現(xiàn)歼跟,但業(yè)務量大功能復雜時和媳,使用編程式事務無疑是痛苦的,而聲明式事務不同哈街,聲明式事務屬于無侵入式留瞳,不會影響業(yè)務邏輯的實現(xiàn),只需要在配置文件中做相關的事務規(guī)則聲明或者通過注解的方式骚秦,便可以將事務規(guī)則應用到業(yè)務邏輯中她倘。

? ? ? 顯然聲明式事務管理要優(yōu)于編程式事務管理,這正是Spring倡導的非侵入式的編程方式作箍。唯一不足的地方就是聲明式事務管理的粒度是方法級別硬梁,而編程式事務管理是可以到代碼塊的,但是可以通過提取方法的方式完成聲明式事務管理的配置胞得。

四荧止、@Transactional介紹

@Transactional? 常作用在類和類方法上

作用于類:當把@Transactional 注解放在類上時,表示所有該類的public方法都配置相同的事務屬性信息。

作用于方法:當類配置了@Transactional跃巡,方法也配置了@Transactional危号,方法的事務會覆蓋類的事務配置信息。

五素邪、@Transactional注解屬性解析

5.1 事務的傳播機制

? ? ? ?@Transactional(propagation=Propagation.REQUIRED) :如果有事務, 那么加入事務, 沒有的話新建一個(默認)

  @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不為這個方法開啟事務

  @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事務,都創(chuàng)建一個新的事務,原來的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務

  @Transactional(propagation=Propagation.MANDATORY) :必須在一個已有的事務中執(zhí)行,否則拋出異常

  @Transactional(propagation=Propagation.NEVER) :必須在一個沒有的事務中執(zhí)行,否則拋出異常(與Propagation.MANDATORY相反)

  @Transactional(propagation=Propagation.SUPPORTS) :如果其他bean調用這個方法,在其他bean中聲明事務,那就用事務.如果其他bean沒有聲明事務,那就不用事務.

5.2 超時設置

@Transactional(timeout=30) //設置超時30秒外莲,經(jīng)過測試和實踐,這里的超時應該是sql的超時時間兔朦。

該屬性用于設置事務的超時秒數(shù)偷线,默認值為-1表示永不超時

5.3事務隔離級別

@Transactional(isolation = Isolation.READ_UNCOMMITTED):讀取未提交數(shù)據(jù)(會出現(xiàn)臟讀, 不可重復讀) 基本不使用

@Transactional(isolation = Isolation.READ_COMMITTED):讀取已提交數(shù)據(jù)(會出現(xiàn)不可重復讀和幻讀)

@Transactional(isolation = Isolation.REPEATABLE_READ):可重復讀(會出現(xiàn)幻讀)

@Transactional(isolation = Isolation.SERIALIZABLE):串行化

MYSQL: 默認為REPEATABLE_READ級別

SQLSERVER: 默認為READ_COMMITTED

1》臟讀: 一個事務讀取到另一事務未提交的更新數(shù)據(jù)

2》不可重復讀: 在同一事務中, 多次讀取同一數(shù)據(jù)返回的結果有所不同, 換句話說,

后續(xù)讀取可以讀到另一事務已提交的更新數(shù)據(jù). 相反, "可重復讀"在同一事務中多次

讀取數(shù)據(jù)時, 能夠保證所讀數(shù)據(jù)一樣, 也就是后續(xù)讀取不能讀到另一事務已提交的更新數(shù)據(jù)

3》幻讀: 一個事務讀到另一個事務已提交的insert數(shù)據(jù)

5.4 readOnly 屬性

readOnly :指定事務是否為只讀事務,默認值為 false烘绽;為了忽略那些不需要事務的方法淋昭,比如讀取數(shù)據(jù),可以設置 read-only 為 true安接。

5.5 rollbackFor 屬性

rollbackFor :用于指定能夠觸發(fā)事務回滾的異常類型,可以指定多個異常類型英融。

5.6 noRollbackFor屬性**

noRollbackFor:拋出指定的異常類型盏檐,不回滾事務,也可以指定多個異常類型驶悟。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末胡野,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痕鳍,更是在濱河造成了極大的恐慌硫豆,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笼呆,死亡現(xiàn)場離奇詭異熊响,居然都是意外死亡,警方通過查閱死者的電腦和手機诗赌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門汗茄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铭若,你說我怎么就攤上這事洪碳。” “怎么了叼屠?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵瞳腌,是天一觀的道長。 經(jīng)常有香客問我镜雨,道長嫂侍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮吵冒,結果婚禮上纯命,老公的妹妹穿的比我還像新娘。我一直安慰自己痹栖,他們只是感情好亿汞,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揪阿,像睡著了一般疗我。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上南捂,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天吴裤,我揣著相機與錄音,去河邊找鬼溺健。 笑死麦牺,一個胖子當著我的面吹牛,可吹牛的內容都是我干的鞭缭。 我是一名探鬼主播剖膳,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岭辣!你這毒婦竟也來了吱晒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沦童,失蹤者是張志新(化名)和其女友劉穎仑濒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷遗,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡墩瞳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹦肿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矗烛。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖箩溃,靈堂內的尸體忽然破棺而出瞭吃,到底是詐尸還是另有隱情,我是刑警寧澤涣旨,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布歪架,位于F島的核電站,受9級特大地震影響霹陡,放射性物質發(fā)生泄漏和蚪。R本人自食惡果不足惜止状,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攒霹。 院中可真熱鬧怯疤,春花似錦、人聲如沸催束。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抠刺。三九已至塔淤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間速妖,已是汗流浹背高蜂。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罕容,地道東北人备恤。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像杀赢,于是被迫代替她去往敵國和親烘跺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354