Spring声明式事务回滚机制
2018-05-18 本文已影响165人
小小蒜头
需求:本来的流程是用户对将购买的商品订单进行支付,支付成功后商品减库存,然后打印小票,将这笔订单信息存进数据库,如果用户支付请求抛出异常时,数据库里商品库存应该保持不变,本次订单也不会存进数据库,这里我的解决方式就是在这个方法上加上事务处理。
配置spring-mybatis.xml
<!-- 事物切面配置 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="payPointCut" expression="execution(* com.fuhuitong.applychain.service.impl.POSAppServiceImpl.posPaySuccess(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="payPointCut"/>
</aop:config>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
添加事务
注意:要加入一个包,本人因为少这一个包报错,走了很多弯路。
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>