溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

spring事務(wù)的注意事項(xiàng)有哪些

發(fā)布時(shí)間:2021-11-30 17:59:29 來(lái)源:億速云 閱讀:194 作者:柒染 欄目:數(shù)據(jù)庫(kù)

spring事務(wù)的注意事項(xiàng)有哪些,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

  事務(wù)一般是指數(shù)據(jù)庫(kù)事務(wù),是指作為一個(gè)程序執(zhí)行單元執(zhí)行的一系列操作,要么完全執(zhí)行,要么完全不執(zhí)行。事務(wù)就是判斷以結(jié)果為導(dǎo)向的標(biāo)準(zhǔn)。

spring的特性(ACID)

  (1).原子性(atomicity)

  原子性就是一個(gè)不可分割的工作單元。簡(jiǎn)單的說(shuō),就是指事務(wù)包含的所有操作要么全部成功,要么全部失敗回滾。因此事務(wù)的操作如果成功就必須要完全應(yīng)用到數(shù)據(jù)庫(kù),如果失敗則不能對(duì)數(shù)據(jù)庫(kù)有任何影響。

  (2).一致性(consistency)

  一致性就是事務(wù)必須是使一個(gè)一致性狀態(tài)變成另一個(gè)狀態(tài),也就是說(shuō)一個(gè)書(shū)屋執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。那轉(zhuǎn)賬來(lái)說(shuō),假設(shè)用戶A和用戶B兩者的錢(qián)加起來(lái)一共是5000.那么不管A和B之間如何轉(zhuǎn)賬,轉(zhuǎn)多少次,事務(wù)結(jié)束后兩者的錢(qián)加起來(lái)還是5000。

  (3).隔離性(isolation)

  隔離性就是一個(gè)事務(wù)的執(zhí)行不能被另一個(gè)事務(wù)干擾。當(dāng)多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)操作同一張表時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶開(kāi)啟的事務(wù),不能被其他事務(wù)的操作所干擾,并發(fā)事務(wù)之間要相互隔離。

  (4).持久性(durability)

  持久性是指一個(gè)事務(wù)一旦被提交了,那么對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的改變就是永久的。即使是在數(shù)據(jù)系統(tǒng)遇到故障的情況下也不會(huì)丟失提交事務(wù)的操作。

spring的隔離級(jí)別

  *臟讀:一個(gè)事務(wù)讀到了另一個(gè)事務(wù)未提交的數(shù)據(jù)

  *不可重復(fù)讀:一個(gè)事務(wù)讀到另一個(gè)事務(wù)已經(jīng)提交(update)的數(shù)據(jù)導(dǎo)致多次查詢結(jié)果不一致

  *虛幻讀:一個(gè)事務(wù)讀到了另一個(gè)事務(wù)已經(jīng)提交(insert)的數(shù)據(jù)導(dǎo)致多次查詢結(jié)果不一致。

  對(duì)于sqlserver和oracle的默認(rèn)隔離級(jí)別是RC,mysql的默認(rèn)隔離級(jí)別是RR。

spring的注意事項(xiàng)

  1.出現(xiàn)Exception是無(wú)法回滾的,只有拋出RuntimeException和Error異常時(shí)才能回滾。2.在事務(wù)代碼中捕獲了異常,是無(wú)法進(jìn)行回滾的。

  3.如果是使用的spring+mvc模式。并且spring和mvc都掃描了service層(事務(wù)處理層),事務(wù)不生效。因?yàn)閟pring會(huì)有限加載mvc的配置文件,而事務(wù)的配置基本上都是在spring中,因?yàn)閟pring的子容器先于父容器啟動(dòng),造成在controller中注入service時(shí)還沒(méi)有加載事務(wù)。

  4.mysql的myISAM引擎,是不支持事務(wù)的,需要設(shè)置為innoDB模式。

  5.事務(wù)的開(kāi)啟必須放到listener里面加載,如果放到dispatchServlet的配置里面,事務(wù)不生效。

  6.如果在接口中使用@Transactional,只有JDK動(dòng)態(tài)代理才能生效,CGLIB動(dòng)態(tài)代理是不生效的,因?yàn)樽⒔馐遣荒芾^承的。

關(guān)于spring事務(wù)的注意事項(xiàng)有哪些問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI