什么是事務(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

數(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ù)接口:
