一、 使用spring注解的方式来实现事务
步骤:
1)声明事务管理器PlatformTransactionManager的实现类,我们使用mybatis来链接数据库,所以这里我们使用DataSourceTransactionManager的实现类
在spring配置文件中我们使用bean标签声明
<bean id="transactionManager" class="xxx.xxx.xxx.DataSourceTransactionManager">
<property name="dataSource" value="dataSource">
</bean>
2) 开启注解驱动
<tx:annotation-driver transaction-Manager="transactionManager"/>
3) 在目标方法上(也可以是目标类)加入@Transactional注解(propagation=propagation.require,isolation=isolation.DEFAULT,rollbackFor={NotNullException.class,NoPointException.class}....)
详细参数见资料文档。
二、使用aspectJ的AOP来配置管理事务
步骤: 1)新加入 aspectj 的依赖坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
2)声明事务管理器,我们使用DataSourceTransactionManager
<bean id="transactionManager" class="xxx.xxx.xxx.DataSourceTransactionManager">
<property name="dataSource" value="dataSource">
</bean>
3) 配置事务通知,就是说明我事务要织入到哪些方法上,以及事务的管理参数是哪些(传播属性,回退级别,安全级别等)
事务通知:切面
<advice id="myAdvice" transaction-Manager="transactionManager">
<tx:attributes>
<tx:method="buySomeThing" propagation="REQUIRED" isolation="DEFAULT" rollbackFor=""/>
<tx:method="buy*"……/>
<tx:method="*"……/>
</tx:attributes>
</advice>
4)配置增强器,说明事务通知要作用给谁
aop配置,通知应用的切入点
<aop:conf>
<aop:pointcut expression="execution("* *..service..*.*(..)")" id="servletPt"/>
声明增强器,通知和切入点的组合
<aop:advisor advice-ref="myAdvice" point-ref="servletPt" />
</aop:conf>
原文:https://www.cnblogs.com/lihp-java/p/14525341.html