Spring的事務學習

1、事務的特徵(ACID)

(1)原子性:不可分割性,操作要麼全部執行,要麼全部不執行。

(2)一致性:事務的執行使得數據庫從一種正確的狀態轉換爲另一種正確的狀態。

(3)隔離性:一個事務的執行不能干擾其他事務。

(4)持久性:事務完成後,對數據的改變是永久性的,結果會永久的保存在數據庫中。

Java事務產生的原因:程序操作sh數據可的需要,編程中,實現ACID的操作。

Java事務實現範圍:通過JDBC間接實現對數據庫的增刪改查。

2、Java事務類型

JDBC事務:用Connection對象控制,包括手動模式和自動模式。侷限在一個數據庫連接內,使用簡單。

JTA事務:與實現無關,與協議無關的API。可跨越多個數據庫和多個DAO,使用複雜。

容器的事務:應用服務器提供,大多給予JTA完成,侷限於EJB。

3、Spring事務核心接口:事務管理器、事務定義接口、事務狀態接口。

4、事務定義接口:Spring事務屬性範圍:隔離規則、傳播行爲、回滾規則、事務超時、是否只讀。

事務的讀取類型:髒讀、不可重複讀、幻讀。

      髒讀:事務沒提交,提取讀取。

     不可重複讀:兩次讀取到的數據不一致。

      幻讀:事務不是獨立執行時,發生的一種非預期現象。

(1)事務的隔離級別:一個事務可能受其他事務影響的程度。

 ISOLATION_DEFAULT: 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.。

 ISOLATION_READ_UNCOMMITTED: 這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的數據。       這種隔離級別會產生髒讀,不可重複讀和幻像讀。 

 ISOLATION_READ_COMMITTED: 保證一個事務修改的數據提交後才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據

ISOLATION_REPEATABLE_READ: 這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。       它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重複讀)。

ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理爲順序執行。       除了防止髒讀,不可重複讀外,還避免了幻像讀。

(2)事務的傳播行爲:一個事務被另一個事務方法調用時,必須知道事務如何傳播。

PROPAGATION_REQUIRED:如果存在一個事務,支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。

PROPAGATION_SUPPORTS:如果存在一個事務,支持當前事務,如果當前沒有事務,就以非事務方式執行。

PROPAGATION_MANDATORY:如果存在一個事務,支持當前事務,如果當前沒有事務,就拋出異常。

PROPAGATION_REQUIRES_NEW:新建事務,如果當前存在事務,把當前事務掛起。

PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。

PROPAGATION_NESTED:如果當前存在事務,則在嵌套事務內執行,如果當前沒有說事務,則執行與PROPAGATION_REQUIRED類似的操作。

(3)事務是否只讀:利用數據庫的“只讀”屬性,進行特定優化處理。

(4)事務超時:特定時間內事務沒有執行完畢,要進行回滾。

(5)事務回滾:遇到運行期異常時纔會回滾。

5、事務狀態:通過事務管理器獲取事務狀態,控制事務在回滾或提交時對應的zh狀態。

6、spring事務實現的兩種方式:編程式和聲明式

(1)編程式事務實現方式

       事務管理器方式:核心類爲spring事務管理的三個接口及JDBCTemplate類。

       模板事務的方式:主要工具爲jdbcTemplate類。

(2)聲明式事務管理

基於AOP的模式機制,通過對方法進行前後攔截。xml配置或註解方式實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章