1. 程式人生 > 實用技巧 >Spring-宣告式事務

Spring-宣告式事務

宣告式事務

目錄

1. 事務回顧

  • ACID原則:

    • 原子性
      • 一個事務內的操作,要麼同時成功,要麼同時失敗
    • 一致性
      • 一個事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態
      • 與原子性的區別: 一致性是基礎,也是最終目的,其他三個特性(原子性、隔離性和永續性)都是為了保證一致性的
    • 隔離性
      • 多個業務可能操作同一個資源, 防止資料損壞
    • 永續性
      • 事務一旦提交, 無論系統發生什麼問題, 結果都不會再被影響, 被持久化的寫到儲存器中!
  • 把一組業務當成一個業務來做, 要麼都成功, 要麼都失敗

  • 事務在專案開發中, 十分的重要, 設計到資料的一致性問題, 不能馬虎

  • 確保完整性和一致性

2. Spring中的事務管理

  • 宣告式事務: AOP ==> 不改變原有程式碼的情況下, 實現事務
  • 程式設計式事務 需要在程式碼中, 進行事務的管理

宣告式事務要在Spring中配置

<!--配置宣告式事務-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<!--結合AOP, 實現事務的織入-->
<!--配置事務的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!--給哪些方法配置事務-->
    <!--配置事務的傳播特性 propagation-->
    <tx:attributes>
        <tx:method name="add" propagation="REQUIRED"/>
        <tx:method name="delete" propagation="REQUIRED"/>
        <tx:method name="update" propagation="REQUIRED"/>
        <!--query開頭的方法,只能對資料庫進行查詢操作-->
        <tx:method name="query" read-only="true"/>
        <!--所有方法-->
        <tx:method name="*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

<!--設定事務切入-->
<aop:config>
    <aop:pointcut id="txPointCut" expression="execution(* com.wang.mapper.* .*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>