Spring声明式事务
目标
从事务角度:一个事务方法中包含的多个数据库操作,要么一起提交、要么一起回滚.也就是说事务方法中的多个数据库操作,有任何一个失败,整个事务全部回滚.
从声明式角度:由Spring来全面接管数据库事务.用声明式代替编程式(解耦).
思路
操作步骤
1、导入坐标
<!-- AOP 所需依赖 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency> <!-- AOP 所需依赖 --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> </dependency>
2、修改配置文件
- 配置事务管理器
- 配置AOP
- 配置事务管理器
在spring-mabatis.xml增加配置如下:
<!-- 3\配置 MapperScannerConfigurer --> <!-- 把 MyBatis 创建的 Mapper 接口类型的代理对象扫描到 IOC 容器中 --> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 使用 basePackage 属性指定 Mapper 接口所在包 --> <property name="basePackage" value="com.adom.mapper"/> </bean> <!--3\配置Spring框架声明式事务管理--> <!--配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--配置AOP增强--> <!-- 配置 AOP --> <aop:config> <!-- 配置切入点表达式 --> <aop:pointcut expression="execution(* *..*Service.*(..))" id="txPointCut"/> <!-- 将事务通知和切入点表达式关联到一起 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/> </aop:config> <!-- 配置事务通知 --> <!-- id 属性用于在 aop:advisor 中引用事务通知 --> <!-- transaction-manager 属性用于引用事务管理器,如果事务管理器的 bean 的 id 正好是 transactionManager,可以省略这个属性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- name 属性指定当前要配置的事务方法的方法名 --> <!-- 查询的方法通常设置为只读,便于数据库根据只读属性进行相关性能优化 --> <tx:method name="get*" read-only="true"/> <tx:method name="query*" read-only="true"/> <tx:method name="find*" read-only="true"/> <tx:method name="count*" read-only="true"/> <!-- 增删改方法另外配置 --> <!-- propagation 属性配置事务方法的传播行为 --> <!-- 默认值:REQUIRED 表示:当前方法必须运行在事务中,如果没有事务,则开 启事务,在自己的事务中运行。如果已经有了已开启的事务,则在当前事务中运行。 有可能 和其他方法共用同一个事务。 --> <!-- 建议值:REQUIRES_NEW 表示:当前方法必须运行在事务中,如果没有事务, 则开启事务,在自己的事务中运行。 和REQUIRED的区别是就算现在已经有了已开启的事务, 也一定要开启自己的事务, 避免和其他方法共用同一个事务。 --> <!-- rollback-for 属性配置回滚的异常 --> <!-- 默认值:运行时异常 --> <!-- 建议值:编译时异常+运行时异常 --> <tx:method name="save*" rollback-for="java.lang.Exception" propagation="REQUIRES_NEW"/> <tx:method name="remove*" rollback-for="java.lang.Exception" propagation="REQUIRES_NEW"/> <tx:method name="update*" rollback-for="java.lang.Exception" propagation="REQUIRES_NEW"/> </tx:attributes> </tx:advice>
标签:回滚,管理器,数据库,事务,cglib,声明 来源: https://www.cnblogs.com/Adam-Ye/p/13338725.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。