1. 程式人生 > >(Spring)Spring框架的事務管理

(Spring)Spring框架的事務管理

事務的回顧

      1、事務:指的是邏輯上一組操作,組成這個事務的各個執行單元,要麼都成功,要麼都失敗!!!

      2、事務的特性

           *   原子性

           *   一致性

           *   隔離性

           *   永續性

      3、如果不考慮隔離性,引發安全性問題

           *   讀問題:

                >  髒讀

                >  不可重複讀

                >  虛讀

            *   寫問題:

                >  丟失更新

      4、如何解決安全性問題

           *   讀問題解決,設定資料庫隔離級別

           *   寫問題解決可以使用 悲觀鎖 和 樂觀鎖 的方式解決

Spring框架的事務管理相關的類和API

        1、PlatformTransactionManager 介面    ---  平臺事務管理器(真正管理事務的類)。該介面有具體的實現類,根據不同的持久層框架,需要選擇不同的實現類

        2、TransactionDefinition 介面                 ---  事務定義資訊(事務的隔離級別、傳播行為、超時、只讀)

        3、TransactionStatus 介面

                       ---  事務的狀態

        4、總結:上述物件之間的關係,平臺事務管理真正管理事務物件。根據事務定義的資訊TransactionDefinition 進行事務管理,在管理事務中產生一些狀態。將狀態記錄到TransactionStatus中;

        5、PlatformTransactionManager 介面中實現類和常用的方法

              >  介面的實現類

                  *   如果使用的Spring的JDBC模板或者MyBatis框架,需要選擇DataSourceTransactionManager實現類

                  *   如果使用的是Hibernate的框架,需要選擇HibernateTransactionManager實現類

              >  該介面的常用方法

                  *   void  commit(TransactionStatus  status)

                  *   TransactionStatus  getTransaction(TransactionDefinition  definition)

                  *   void  rollback(TransactionStatus  status)

        6、TransactionDefinition 

             >  事務隔離級別的常量

                  *  static  int  ISOLATION_DEFAULT                             ---  採用資料庫的預設隔離級別

                  *  static  int  ISOLATION_READ_UNCOMMITTED  

                  *  static  int  ISOLATION_READ_COMMITED

                  *  static  int  ISOLATION_REPEATABLE_READ

                  *  static  int  ISOLATION_SERIALIZABLE

             >  事務的傳播行為常量(一般不用設定,使用預設值)

                  *  什麼是事務的傳播行為:解決的是業務層之間的方法呼叫!!!

                  *  PROPAGATION_REQUIRED(預設值)      ---  A中有事務,使用A中的事務。如果沒有事務,B就會開啟一個新的事務,將A包含進來(保證A,B在同一個事務中)

                  *  PROPAGATION_SUPPORTS            ---  A中有事務,使用A中的事務。如果A中沒有事務,那麼B也不使用事務

                  *  PROPAGATION_MANDATORY       ---  A中有事務,使用A中的事務。如果A沒有事務,丟擲異常

                  *  PROPAGATION_REQUIRES_NEW(記) ---  A中有事務,將A中的事務掛起。B建立一個新的事務(保證A,B沒有在一個事務中)

                  *  PROPAGATION_NOT_SUPPORTED        ---  A中有事務,將A中的事務掛起

                  *  PROPAGATION_NEVER                          ---  A中有事務,丟擲異常

                *  PROPAGATION_NESTED(記)              ---  巢狀事務。當A執行之後,就會在這個位置設定一個儲存點。如果B沒有問題,執行通過。如果B出現異常,執行客戶根據需求回滾(選擇回滾到儲存點或者是最初始狀態)