1. 程式人生 > 其它 >韓順平零基礎學java—第二階段框架

韓順平零基礎學java—第二階段框架

Spring 事務管理

事務的隔離級別:4個

  • READ_UNCOMMITTED: 讀未提交。為解決任何併發問題。

  • READ_COMMITTD: 讀已提交。解決髒讀,存在不可重複讀與幻讀

  • REPEATABLE_READ: 可重複讀。解決髒讀、不可重複讀,存在幻讀

  • SERIALIZABLE: 序列話。不存在併發問題。

事務超時時間

預設為-1

事務的傳播行為:7個

  • PROPAGATION_REQUIRED 指定方法必須在事務內執行 有事務執行 沒有事務事務
  • PROPAGATION_REQUIRED NEW 建立一個自己的事務 當前有事務,掛著 新建事務執行完畢 在執行當前事務
  • PROPAGATION_SUPPORTS 支援事務 有事務執行 沒有事務也可執行
  • 重點掌握上面三個
  • PROPAGATION_MANDATORY PROPAGATION_NESTED PROPAGATION_NEVER PROPAGATION_NOT_SUPPORTED

事務提交,事務回滾的時機

  • 方法執行沒有異常丟擲,執行提交事務。 commit
  • 方法執行丟擲異常或錯誤,執行事務回滾。 rollback
  • 方法丟擲受查異常時,提交事務 寫程式碼的時候必須處理的異常IOException

總結Spring的事務

  • 管理事務的時 事務管理和他的實現類
  • Spring的事務是一個統一模型
    • 指定要使用的事務管理器實現類,使用
    • 指定那些類,那些方法需要加入事務的功能
    • 指定方法需要的隔離級別,傳播行為,超時

Spring框架中提供的處理事務方案

  • 適合中小專案使用的,註解方案

    • spring框架自己用aop實現給業務方法增加業務的功能,使用@Transactional註解增加事務
    • @Transctional註解是spring框架自己的註解,放在public方法的上面,表示當前方法具有事務。可以給註解的屬性賦值,表示具體的隔離級別,傳播行為,異常資訊等
  • 適合大型專案使用的,aspectj 需要大量事務配置事務,使用aspectj框架功能,在spring配置檔案中宣告類,方法需要的事務。這種方式業務方法和事務配置完全分離。

    • 實現步驟:都是在xml配置檔案中實現的

      • 加入依賴

      • 宣告事務管理器物件

        <bean id="xx" class="DatasourceTransactionManager">
        
      • 宣告方法需要的事務型別(配置方法的事務屬性【隔離級別,傳播行為,超時】)

      • 配置aop:指定那些類需要代理

        <tx:advice id="myAdvice" transaction-manager="transactionManager">
        	<tx:attributes>
            <!--tx:method:給具體方法配置事務屬性,method可以有多個
        		name:方法名稱  完整方法名稱,可以使用萬用字元
        		propagation:傳播行為,列舉值
        		isolation:隔離級別
        		rollback-for:指定異常的類名,全限定類名。發生異常回滾
        		-->
            	<tx:method name="" propagation="" isolayion="" rollback-for=""/>
            </tx:attributes>
        </tx:advice>
        
        <aop:config>
            <!--配置切入點表示式:指定那些包中類,要使用事務
        		id:切入點表示式的名稱,唯一值
        		expression:切入點表示式,指定那些類要使用事務,aspectj會建立代理物件
        	-->
        	<aop:pointcut id="sevicePt" expression="execution=(* *..service..*.*(..))"/>
            <!--配置增強器:關聯advice和pointcut-->
            <aop:advicor advice-ref="myAdvice" pointcut-ref="sevicePt"
        </aop:config>
        
  • @Transactional

    • 織入到public方法中,實現事務管理

      • propagation:用於設定事務的傳播屬性。該屬性型別為Propagation列舉,預設值為 Propagation_REQUIRED
      • isolation: 用於設定事務的隔離級別。該屬性型別為laolation列舉。預設值為isolation.DEFAULT
      • readOnly:用於設定該方法對資料庫的操作是否是隻讀的。該屬性為boolean,預設值false
      • timeout:用於設定本操作與資料庫連線的超時時限。單位為秒,型別為int,預設值為-1,即沒有時限
      • rollbackFor:執行需要回滾的異常類。型別為CLass[] ,預設值為空陣列。
      • rollbackForClassName:指定需要回滾的異常類類名,型別為String[],預設值為空陣列
      • noRollbackFor:發生異常不回滾
      • noRollbackForClassName:發生不回滾
    • 事務@Transactional步驟:

      • 需要宣告事務管理器物件:

        <bean id="xx" Class="DataSourceTransactionManager"/>
        
      • 開啟事務註解驅動,告訴spring框架,我要使用註解方式管理事務。