Spring事務(wù)管理入門總結(jié)

什么是事務(wù)

????事務(wù)是正確執(zhí)行一系列的操作(或動作)?,?使得數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)換成另一種狀態(tài),且保證操作全部成功,或者全部失敗

事務(wù)原則是什么

????事務(wù)必須服從ISO/IEC所制定的ACID原則。

????ACID原則的具體內(nèi)涵如下:

????????原子性( Atomicity ) :

????????????即不可分割性,事務(wù)要么全部被執(zhí)行,要么就全部不被執(zhí)行。

? ? ? ? 一致性( Consistency ) :

????????????事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)。

????????隔離性( Isolation ) :

????????????在事務(wù)正確提交之前,它可能的結(jié)果不應(yīng)顯示給任何其他事務(wù)。

????????持久性( Durability ) :

????????????事務(wù)正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中。

Java事務(wù)

Java事務(wù)的產(chǎn)生

????程序操作數(shù)據(jù)庫的需要。在Java編寫的程序或系統(tǒng)中,實現(xiàn)ACID的操作。

Java事務(wù)實現(xiàn)范圍

????通過JDBC相應(yīng)方法間接來實現(xiàn)對數(shù)據(jù)庫的增、刪、改、查,把事務(wù)轉(zhuǎn)移到Java程序代碼中進行控制。

Java事務(wù)實現(xiàn)模式

Java事務(wù)的實現(xiàn)

????通過Java代碼來實現(xiàn)對數(shù)據(jù)庫的事務(wù)性操作。

Java事務(wù)類型

????JDBC事務(wù):用Connection對象控制,包括手動模式和自動模式。

????JTA(Java?Transaction?API)事務(wù):與實現(xiàn)無關(guān)的,與協(xié)議無關(guān)的API。

????容器事務(wù):應(yīng)用服務(wù)器提供的,且大多是基于JTA完成(通?;贘NDI的,相當(dāng)復(fù)雜的API實現(xiàn))。

三種事務(wù)的差異

????JDBC事務(wù):控制的局限性在一一個數(shù)據(jù)庫連接內(nèi),但是其使用簡單。

????JTA事務(wù):功能強大,可跨越多個數(shù)據(jù)庫或多DAO ,使用比較復(fù)雜。

????容器事務(wù):主要指的是J2EE應(yīng)用服務(wù)器提供的事務(wù)管理,局限于EJB

事務(wù)接口的構(gòu)架

數(shù)據(jù)讀取類型說明

臟讀:

????事務(wù)沒提交,提前讀取。

不可重復(fù)讀:

????兩次讀取的數(shù)據(jù)不一致;

幻讀:

????事務(wù)不是獨立執(zhí)行時發(fā)生的一種非預(yù)期現(xiàn)象。

事務(wù)隔離級別

????隔離級別定義了一個事務(wù)可能受其他并發(fā)事務(wù)影響的程度。

????隔離級別分為:


隔離級別

事務(wù)傳播行為

當(dāng)事務(wù)方法被另一個事務(wù)方法調(diào)用時,必須指定事務(wù)應(yīng)該如何傳播。

在Spring的提供了7種傳播行為:


傳播行為

事務(wù)是否只讀

事務(wù)是否只讀

????利用數(shù)據(jù)庫事務(wù)的“只讀”屬性,進行特定優(yōu)化處理。

設(shè)置“只讀”??注意:

????事務(wù)的是否“只讀”屬性,不同的數(shù)據(jù)庫廠商支持不同。

????通常而言:只讀屬性的應(yīng)用要參考廠商的具體支持說明,比如:

Oracle的"readOnly"不起作用,不影響其增刪改查;

Mysql的"readOnly"為true?,只能查,增刪改則出異常。

事務(wù)超時

事務(wù)超時

????事務(wù)超時就是事務(wù)的一個定時器,在特定時間內(nèi)事務(wù)如果沒有執(zhí)行完畢,那么就會自動回滾,而不是一直等待其結(jié)束。

設(shè)計事務(wù)時注意點:

????為了使應(yīng)用程序很好地運行,事務(wù)不能運行太長的時間。因為事務(wù)可能涉及對后端數(shù)據(jù)庫的鎖定,所以長時間的事務(wù)會不必要的占用數(shù)據(jù)庫資源。

事務(wù)回滾

事務(wù)回滾

????默認(rèn)情況下,事務(wù)只有遇到運行期異常時才會回滾,而在遇到檢查型異常時不會回滾。

自定義回滾策略:

????聲明事務(wù)在遇到特定的檢查型異常時像遇到運行期異常那樣回滾。

????聲明事務(wù)遇到特定的異常不回滾,即使這些異常是運行期異常。

Spring事務(wù)狀態(tài)

事務(wù)接口

????通過事務(wù)管理器獲取TransactionStatus實例。

????控制事務(wù)在回滾或提交的時候需要應(yīng)用對應(yīng)的事務(wù)狀態(tài)。

????Spring事務(wù)接口:

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

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

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