Spring中事務(wù)分為編程式事務(wù)和聲明式事務(wù)。編程式事務(wù)由于需要在代碼中硬編碼魂挂,在實(shí)際項(xiàng)目開發(fā)中比較少用到怨愤。實(shí)際開發(fā)中用的比較多的就是聲明式事務(wù)符欠。
聲明式事務(wù)又分為基于配置的和基于@Transactional
注解的。
1. 基于配置的聲明式事務(wù)
- 配置事務(wù)管理器
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
- 配置需要加入事務(wù)的規(guī)則
<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>
<!-- 把事務(wù)控制在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注解的聲明式事務(wù)
- 配置事務(wù)管理器
<!-- 定義事務(wù)管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--使用注釋事務(wù) -->
<tx:annotation-driven transaction-manager="transactionManager" />
- 在需要加入事務(wù)的方法或者類上添加@Transactional