Spring 中的事務管理

weixin_34253539發表於2018-05-08

1. 事務的四個關鍵屬性(ACID)

  • 原子性(atomicity): 事務是一個原子操作, 由一系列動作組成. 事務的原子性確保動作要麼全部完成要麼完全不起作用.
  • 一致性(consistency): 一旦所有事務動作完成, 事務就被提交. 資料和資源就處於一種滿足業務規則的一致性狀態中.
  • 隔離性(isolation): 可能有許多事務會同時處理相同的資料, 因此每個事物都應該與其他事務隔離開來, 防止資料損壞.
  • 永續性(durability): 一旦事務完成, 無論發生什麼系統錯誤, 它的結果都不應該受到影響. 通常情況下, 事務的結果被寫到持久化儲存器中.

2. Spring 中的事務管理器的不同實現

5487019-2cfee23b4109addb.png

3. Spring 的宣告式事務管理

3.1 使用配置檔案進行事務的宣告式管理

    <!-- 宣告式事務管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="pooledDataSource" />
    </bean>
 
<!-- 配置事物增強,如何控制 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 所有以add開頭的方法都是事物方法 -->
            <tx:method name="add*" 
                       <!-- 事務傳播行為 -->
                       propagation="REQUIRES_NEW"
                      <!--  事務隔離級別-->
                      isolation="READ_COMMITED"   
                      <!---事務回滾屬性-->
                      rollback-for="java.lang.IOEXception,java.sql.SQLException"                     
                      no-rollback-for="java.lang.ArithmeticException"/>
            
            <!-- 以get開始的所有方法 -->
            <tx:method name="get*" 
                       <!-- 只讀事務屬性-->
                       read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <!-- aop切入點表示式 -->
        <aop:pointcut expression="execution(* com.supreme.service..*(..))"
            id="txPoint" />
        <!-- 配置事務增強 --> 
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint" />
    </aop:config>

3.2 使用@Transactional註解宣告式的管理事務

    <!-- 宣告式事務管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="pooledDataSource" />
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager"/>

3.2.1 @Transactional註解使用細節

5487019-61b0b8bf89095a48.png

3.2.2 @Transactional註解使用示例

5487019-902cf4210846faee.png

相關文章