Spring宣告式事務的兩種實現方式

weixin_33978044發表於2018-11-15

Spring中事務分為程式設計式事務和宣告式事務。程式設計式事務由於需要在程式碼中硬編碼,在實際專案開發中比較少用到。實際開發中用的比較多的就是宣告式事務。

宣告式事務又分為基於配置的和基於@Transactional註解的。

1. 基於配置的宣告式事務

  1. 配置事務管理器
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">       
          <property name="dataSource" ref="dataSource"></property>  
</bean>
  1. 配置需要加入事務的規則
<tx:advice id="iccardTxAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException"/>
        <tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.RuntimeException" />
        <tx:method name="add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.RuntimeException" />
        <tx:method name="create*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.RuntimeException" />
        <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />

        <tx:method name="find*" propagation="SUPPORTS" />
        <tx:method name="get*" propagation="SUPPORTS" />
        <tx:method name="select*" propagation="SUPPORTS" />
        <tx:method name="query*" propagation="SUPPORTS" />
    </tx:attributes>
</tx:advice>

<!-- 把事務控制在service層 -->
<aop:config>
    <aop:pointcut id="txPointcut" expression="execution(public * com.zkzong.service.*.*(..))" />
    <aop:advisor pointcut-ref="txPointcut" advice-ref="iccardTxAdvice" />
</aop:config>

2. 基於@Transactional註解的宣告式事務

  1. 配置事務管理器
<!-- 定義事務管理器 -->    
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
    <property name="dataSource" ref="dataSource" />    
</bean>    
<!--使用註釋事務 -->    
<tx:annotation-driven  transaction-manager="transactionManager" />
  1. 在需要加入事務的方法或者類上新增@Transactional

相關文章