Spring事務(wù)

1、什么是事務(wù)?

事務(wù)是指邏輯上的一組操作,這組操作要么全部成功,要么全部失敗。

2、事務(wù)的特性

①原子性:指事務(wù)的操作要么全部都發(fā)生,要么都不發(fā)生。
②一致性:指事務(wù)執(zhí)行前后數(shù)據(jù)的完整性必須保持一致。
③隔離性:指多個(gè)事務(wù)并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),一個(gè)用戶的事務(wù)不能被其他用戶的事務(wù)所干擾,多個(gè)并發(fā)事務(wù)之間數(shù)據(jù)要相互隔離(可以通過(guò)設(shè)置事務(wù)的隔離級(jí)別解決,后續(xù)會(huì)講到)。
④持久性:指一個(gè)事務(wù)一旦被提交,它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變是永久性的,即使數(shù)據(jù)庫(kù)發(fā)生故障也不應(yīng)該對(duì)其有任何影響。

3、Spring事務(wù)管理器

Spring事務(wù)管理器高層抽象接口主要有3個(gè)接口
①PlatformTransactionManager(平臺(tái)事務(wù)管理器):主要是進(jìn)行事務(wù)的提交回滾等功能。
②TransactionDefinition(事務(wù)定義信息):主要包含事務(wù)的隔離級(jí)別、傳播行為、是否超時(shí)等。
③TransactionStatus(事務(wù)具體運(yùn)行狀態(tài)):包括事務(wù)是否已提交、是否是新創(chuàng)建的事務(wù)、是否有保存點(diǎn)等。

4、PlatformTransactionManager接口

根據(jù)不同的持久化框架提供了不同的PlatformTransactionManager接口實(shí)現(xiàn):
①使用Spring JDBC或iBatis
org.springframework.jdbc.datasource.DataSourceTransactionManager
②使用Hibernate3.0版本
org.springframework.orm.hibernate3.0.HibernateTransactionManager

5、TransactionDefinition接口

若不考慮事務(wù)的隔離性,會(huì)引發(fā)安全問(wèn)題如下:
①臟讀:一個(gè)事務(wù)讀取了另一個(gè)事務(wù)改寫(xiě)但還未提交的數(shù)據(jù),如果這些數(shù)據(jù)被回滾,則讀到的數(shù)據(jù)是無(wú)效的。
②不可重復(fù)讀:在同一事務(wù)中,多次讀取同一數(shù)據(jù)返回的結(jié)果有所不同。
③幻讀:一個(gè)事務(wù)讀取了幾行記錄后,另一個(gè)事務(wù)插入了一些記錄,在后來(lái)的查詢中第一個(gè)事務(wù)就會(huì)發(fā)現(xiàn)有些原來(lái)沒(méi)有的記錄。

5.1事務(wù)的隔離級(jí)別(四種)

事務(wù)的隔離級(jí)別就是用來(lái)解決以上三種安全問(wèn)題的,隔離級(jí)別從低到高有四種:
①read_uncommited:允許你讀取還未提交的改變了的數(shù)據(jù)??赡軙?huì)導(dǎo)致臟讀、不可重復(fù)讀、幻讀。
②read_commited:允許在并發(fā)事務(wù)已提交后讀??煞乐古K讀,但不可重復(fù)讀、幻讀仍可能發(fā)生。
③repeatable_read:可防止臟讀、不可重復(fù)讀,但幻讀仍可能發(fā)生。
④serializable:完全服從ACID的隔離級(jí)別,但是速度是最慢的。
還有就是默認(rèn)的default,它與你后端使用的數(shù)據(jù)庫(kù)默認(rèn)隔離級(jí)別一致,比如使用MySQL默認(rèn)就是repeatable_read,使用Oracle默認(rèn)就是read_commited。

5.2事務(wù)的傳播行為(七種)

事務(wù)的傳播行為主要解決的是業(yè)務(wù)層方法之間相互調(diào)用時(shí)產(chǎn)生的事務(wù)應(yīng)該如何進(jìn)行傳遞的問(wèn)題。比如我要調(diào)用service1中的a()和service2中的b()才能完成一個(gè)業(yè)務(wù)這種情況。
①propagation_required
②propagation_supports
③propagation_mandatory
④propagation_requires_new
⑤propagation_not_supported
⑥propagation_never
⑦propagation_nested
(詳細(xì)的后續(xù)再進(jìn)行添加)

6、TransactionStatus接口

這里就簡(jiǎn)單列舉幾個(gè)常用到的方法:
boolean hasSavePoint()//事務(wù)是否有保存點(diǎn);
boolean isCompleted()//事務(wù)是否已經(jīng)完成了;
boolean isNewTransaction()//是不是一個(gè)新的事務(wù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring 事務(wù)屬性分析 事務(wù)管理對(duì)于企業(yè)應(yīng)用而言至關(guān)重要。它保證了用戶的每一次操作都是可靠的,即便出現(xiàn)了異常的...
    壹點(diǎn)零閱讀 1,381評(píng)論 0 2
  • 事務(wù)概念回顧 什么是事務(wù)? 事務(wù)是邏輯上的一組操作,要么都執(zhí)行,要么都不執(zhí)行. 事物的特性(ACID): 原子性:...
    風(fēng)平浪靜如碼閱讀 189評(píng)論 0 0
  • 你是我的誰(shuí),我是你的誰(shuí),我們是誰(shuí)的誰(shuí)誰(shuí)誰(shuí)。這樣的句型你也許常常演練,又可能很久不曾說(shuō)過(guò)。但總而言之,我們需要對(duì)自己...
    嵩嵩穿著紅舞鞋閱讀 566評(píng)論 0 0
  • 周五莫名其妙地為一點(diǎn)小事弄的心情極差。 雖是小事,但為什么會(huì)一而再再而三地出現(xiàn),為什么總是被忽視,這是一個(gè)人的心到...
    我在安好閱讀 424評(píng)論 0 1

友情鏈接更多精彩內(nèi)容