不同的事务有不同的管理器 记得要引入tx.jar包 事务就是回滚
链接:https://pan.baidu.com/s/1dESiSVYNdx_H44B7koslkw
提取码:42tb
基于XML:
第一步:配置事务管理器 进而对那个数据库进行操作 那个数据库就是引入链接数据库的dataSource
<!-- 回滚 第一步创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource 意思是事务对那个数据库进行操作 他是事务操作 要让他知道他是对那个事务进行操作 对那个数据库进行操作-->
<property name="dataSource" ref="dataSource"></property>
</bean>
第二步: 配置事务增强 配置事务管理器 以为第一步是创建事务管理器 并没有应用上
<!-- transaction-manager="transactionManager:意思是指定用的是那个事务管理器 意思是用的是那个事务管理器-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<!-- 下面是 做事务操作 意思是对那种方法进行增强 那种方法可以应用事务管理器-->
<tx:attributes><!-- attributes:属性的意思 -->
<!-- 设置进行事务操作的方法匹配的规则 -->
<!-- propagation="REQUIRES_NEW:意思是设置隔离级别 可以设置也可以不设置 -->
<tx:method name="account*" propagation="REQUIRES_NEW"/><!-- 业务的方法 只要是account开头的都进行操作 什么样的方法进行匹配 -->
</tx:attributes>
</tx:advice>
第三步:配置切面 advice:增强 ref:位置 advice-ref="txadvice" 意思是那个增强 这里是 tx:advice id="txadvice"
<aop:config>
<!-- 切入点 pointcut:切入点-->
<aop:pointcut expression="execution(* UserService.UserService.*(..)) id="pointcut1"/>
<!-- 切面 advice-ref:用的是那个增强-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
<!-- 这里的意思是把 那个增强用到那个切入点上 -->
</aop:config>
实例:
<!-- 回滚 第一步创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource 意思是事务对那个数据库进行操作 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 第二步 配置事务的增强 advice:增强-->
<!-- transaction-manager="transactionManager:意思是指定用的是那个事务管理器 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<!-- 下面是 做事务操作 -->
<tx:attributes><!-- attributes:属性的意思 -->
<!-- 设置进行事务操作的方法匹配的规则 -->
<!-- propagation="REQUIRES_NEW:意思是设置隔离级别 可以设置也可以不设置 -->
<tx:method name="account*" propagation="REQUIRES_NEW"/><!-- 业务的方法 只要是account开头的都进行操作 什么样的方法进行匹配 -->
</tx:attributes>
</tx:advice>
<!-- 第三步 配置切面 -->
<aop:config>
<!-- 切入点 pointcut:切入点-->
<aop:pointcut expression="execution(* UserService.UserService.*(..)) id="pointcut1"/>
<!-- 切面 advice-ref:用的是那个增强-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
<!-- 这里的意思是把 那个增强用到那个切入点上 -->
</aop:config>
注解形式:
一共就三步
第一步:配置事务管理器 里面注入dataSource 声明是对那个数据库进行操作
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource 意思是事务对那个数据库进行操作 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
第二步:配置事务注解 相当于扫描 和用的那个事务管理器的作用
<!-- 第二步 配置事务注解 也就是开启扫描 --> transaction-manager="transactionManager:用的是那个事务管理器
<tx:annotation-driven transaction-manager="transactionManager"/>
第三步:在事务方法 的 类上 加一个事务的注解
@Transactional // 该注解会对类里面所有的方法都添加事务操作
实例:
<!-- 声明式事务管理 注解方式 -->
<!-- 回滚 第一步创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource 意思是事务对那个数据库进行操作 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 第二步 配置事务注解 也就是开启扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 第三步 要在业务上方法所在类上添加注解 只要是类里面的方法都会事务的部分 -->
<!-- @Transactional -->
@Transactional
public class UserService {//意思是UserService下所有的方法都加上了事务