项目一众筹网01_03环境搭建_声明式事务
Posted 平凡加班狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目一众筹网01_03环境搭建_声明式事务相关的知识,希望对你有一定的参考价值。
声明式事务 目录
文章目录
32-环境搭建-声明式事务-目标
什么是声明式事务,
不管是编程式事务还是声明式事务
归根到底都是事务
简单来说,声明式事务就是把编程式事务的一切,都交给spring来做
我们要学的就是怎么交给sprig来做,这也就是我们的目标
33-环境搭建-声明式事务-思路
在平时,我们声明事务一般都是围绕着 Service 方法
这种方式比较简单,但是注意前提是需要配置一下事务管理器,以及需要修改一下配置文件,具体操作后面会详细说明
除了这种声明式事务,其实还有一种,叫做切入点表达式
34-环境搭建-声明式事务-代码
下面看具体操作:
我们要求每个配置文件不要太长,而且每个配置文件就是专门完成一个任务(单一职责原则)
这样会比较好
下一步就是配置自动扫描的包
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 配置自动扫描的包:主要是为了把Service扫描到IOC容器中 -->
<context:component-scan base-package="com.atguigu.crowd.service"/>
<!-- 配置事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 装配数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务切面 -->
<aop:config>
<!-- 考虑到后面我们整合SpringSecurity,避免把UserDetailsService加入事务控制,让切入点表达式定位到ServiceImpl -->
<aop:pointcut expression="execution(* *..*ServiceImpl.*(..))" id="txPointcut"/>
<!-- 将切入点表达式和事务通知关联起来 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- 配置事务属性 -->
<tx:attributes>
<!-- 查询方法:配置只读属性,让数据库知道这是一个查询操作,能够进行一定优化 -->
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="count*" read-only="true"/>
<!-- 增删改方法:配置事务传播行为、回滚异常 -->
<!--
propagation属性:
REQUIRED:默认值,表示当前方法必须工作在事务中,如果当前线程上没有已经开启的事务,则自己开新事务。如果已经有了,那么就使用这个已有的事务。
顾虑:用别人的事务有可能“被”回滚。
REQUIRES_NEW:建议使用的值,表示不管当前线程上有没有事务,都要自己开事务,在自己的事务中运行。
好处:不会受到其他事务回滚的影响。
-->
<!--
rollback-for属性:配置事务方法针对什么样的异常回滚
默认:运行时异常回滚
建议:编译时异常和运行时异常都回滚
-->
<tx:method name="save*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
<tx:method name="remove*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
<tx:method name="batch*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
</beans>
35-环境搭建-声明式事务-实际测试运行
先建一个接口再建一个实现类
然后实现一下
编程是一个很严谨的事情,错一丁点都不行的
因为日志不全,所以我们改成debug级别的
这下就有完整的sql了,并且有事务的体现,如果你英语比较好的华,在sql语句的前后,必然有事务的体现
必然改成手动提交之类的相关英文字眼
这就说明我们这个配置是没有问题了,我们这个环境是有事务的了
36-环境搭建-声明式事务-注意
自己可以测试验证一下
声明式事务配置好之后,我们的持久化层基本上就OK了
下面就是表述层了
37-表述层-各个配置文件的关系(下一篇)
以上是关于项目一众筹网01_03环境搭建_声明式事务的主要内容,如果未能解决你的问题,请参考以下文章
项目一众筹网01_00此项目是SSM过渡到分布式项目(SpringBootSpringCloud)
项目一众筹网02_1_此次项目的重要性环境搭建-创建常量类管理员登录功能开始表单都是以post方式去提交我们说的控制器就是handlerbase标签的位置实现点击浏览器的上一步
项目一众筹网01_04环境搭建_表述层springMvc的搭建快速打开web.xml快捷键@RequestBody和@ResponseBody的区别以及好处
项目一众筹网01_01环境搭建(后台)MBG逆向工程(基于maven)整合MyBatis-思路和操作依赖信息来源https://mvnrepository.com
项目一众筹网07_01_SpringSecurity框架简介和用法SpringSecurity负责的是 权限验证Spring的注解模式maven引入Spring环境加入layUI环境
项目一众筹网01_05环境搭建-异常映射ajax请求和普通请求的区别基于注解的异常映射@ResponseBody和@RequestBody的区别