spring的事务控制

1.事务介绍

(1)特性:ACID

Atomicity(原子性):事务中的所有操作要么全做要么全不做

Consistency(一致性):事务执行的结果使得数据库从一个一致性状态转移到另一个一致性状态

Isolation(隔离性):一个事务的执行不受其他事务的干扰

Durability(永久性):一个事务一旦提交,对数据库的影响是永久性的

(2)事务并发问题

(3)       隔离级别

2.  Spring封装了事务管理操作

1.事务操作

打开事务  回滚事务   提交事务

2.事务操作对象

因为在不同平台,操作事务的代码各不相同.spring提供了一个接口

(1)PlatformTransactionManager 接口

(2)spring管理事务的属性介绍

事务隔离级别:  1读未提交

2 读已提交

4 可重复读

8 串行化

是否只读   true 只读

False 可操作

事务的传播行为

3.Spring管理事务的三种方式

1.  XML配置(aop)

1.  导包

Aop  aspect   aop联盟  weaver(织入包)

2.导入新的约束(tx)

beans: 最基本

context:读取properties配置

aop:配置aop

tx:配置事务通知

3.配置通知

4.配置将通知织入目标对象

注意:  可以将通知织入多个目标对象,也就是可以对多个不同路径的serviceImpl进行事务控制。配置方式是再开一个aop进行配置

5.例如:

包结构:

配置事务的代码

<!-- 事务模板对象,依赖于事务核心管理器 -->
    <bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager"></property>
    </bean>    

    <!-- ················开始使用XML管理事务························  -->
    <!--  配置事务通知(无论哪种方式都要用到事务的核心管理器)-->
    <tx:advice transaction-manager="transactionManager" id="firstTx">
        <tx:attributes>
            <!--以方法为单位,指定方法应用事务什么属性
             isolation:隔离级别
             read-only:只读属性
             propagation:传播行为
             -->
             <!-- 企业中运用通配符命名规则。两套增删改查(8种) -->
            <tx:method name="save*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="persist*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="delete*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="remove*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="update*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="modify*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="get*" isolation="DEFAULT" read-only="true" propagation="REQUIRED"/>
            <tx:method name="find*" isolation="DEFAULT" read-only="true" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!-- 配置织入 -->
    <aop:config>
        <!-- 配置切点表达式 -->
        <aop:pointcut expression="execution(* cn.xm.exam.service.*.*.*ServiceImpl.*(..))" id="texPc"/>
        <!-- 配置切面:切点+通知
        advice-ref:通知名称
        pointcut-ref:切点名称
         -->
        <aop:advisor advice-ref="firstTx" pointcut-ref="texPc"/>
    </aop:config>
时间: 2024-10-20 20:33:27

spring的事务控制的相关文章

(8)Spring的事务控制

程序的"事务控制", 可以用aop实现! 即,只需要写一次,运行时候动态植入到业务方法上. Spring提供了对事务的管理. 1.事务控制概述 用户访问-->Action --> Service --> Dao 一个业务操作的成功: 调用的service是执行成功的,意味着service中调用的所有的dao是执行成功的. 因此事务应该在Service层统一控制. 1.1.编程式事务控制 自己手动控制事务,就叫做编程式事务控制.这属于细粒度的事务控制: 可以对指定的方法

阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API

分析aop的 xml 的代码.更直观一些 事务提交和回滚就是我们重复的代码 spring业余事务管理器,我们拿过来直接用就可以 提交和回滚的后面直接调用释放.所以释放资源之类就是多余的 在绑定连接到线程的时候,直接就设置成false,所以开启事务这个通知 也是多余的 spring中的事务 需要先导入包pom.xml 用刚上线类.DataSourceTransactionManager 如果用到Hibernate的话.这个是真正带着代码的实现类 TransactionDefinition 事务的隔

阶段3 2.Spring_10.Spring中事务控制_5 spring事务控制的代码准备

创建一个工程,只搭建环境不做配置.等配置的时候把这个项目相关的代码再复制到新项目里面 jar包的打包方式 导入包 事务控制也是基于AOP的.所以这里导入aspectjweaver 复制jdbcTemplate中的代码 复制到当前项目里面 对代码进行改造和删减 删除 resources里面的配置要删减一些  删除 事务是控制在业务层的.所以需要新建Service的接口 一个id查询的方法 一个转账的方法 增加实现类Impl文件夹.然后.把直线xml项目的代码复制过来. 复制到我们的工程下的Impl

阶段3 2.Spring_10.Spring中事务控制_8 spring基于纯注解的声明式事务控制

新建项目 把之前项目src下的内容全部复制过来 pom.xml内复制过来 开始配置 新建一个config的包,然后再新建配置文件类SpringConfiguration @Configuration这个注解是可写可不写的. 这个类会做为字节码的参数传给ApplicationContext @ComponentScan配置要扫描的包 @Import 但是这个Import要导谁呢? 新建JdbcConfig类 这一就可以通过Import导入JdbcConfig这个类 xml里面扫描包的配置可以省略掉

阶段3 2.Spring_10.Spring中事务控制_9 spring编程式事务控制1-了解

编程式的事物控制,使用的情况非常少,主要作为了解 新建项目 首先导入包坐标 复制代码 这里默认值配置了Service.dao和连接池其他的内容都没有配置 也就说现在是没有事物支持的.运行测试文件 有错误,但是金额还是被减去了 编码的方式加事务控制 事务控制都离不开提交和回滚这两个操作.在spring里面它吧提交和回滚的方法提交到事务管理器里面了. 于是我们无论如何都需要在bean.xml里面配置事务管理器 接下来要进行事务控制,那肯定需要提交和回滚的操作 spring提交了一个对象,叫做事务模板

阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制

创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Autowried注入dao dao注解 service改完了改dao.加上Repository 此时不能再继承JdbcDaoSupport.这里的继承删掉. 上面定义jdbcTemplate. 这样直接使用jdbcTemplate来操作 使用Autowired注入jdbcTemplate 删除原来的配置

阶段3 2.Spring_10.Spring中事务控制_10spring编程式事务控制2-了解

在业务层声明 transactionTemplate 并且声称一个set方法等着spring来注入 在需要事物控制的地方执行 execute.但是这个execute需要一个参数 需要的参数是TransactionCollback但是这个是一个接口.想用的话就需要找他它的实现类 这里不找实现类,就写匿名内部类 生成未实现的方法.生成的方法就叫做doInTransaction 就可以把我们的主要代码挪进来 这样涉及到事务提交的地方.都需要代码加在transactionTemplate的execute

阶段3 2.Spring_10.Spring中事务控制_11 spring5新特性的介绍

jdk1.7和1.8的差别 准备好的一个maven工程 反射创建对象10亿次 ,用的时间 替换jdk的版本 选择为1.7 切换了1.7的版本以后呢执行的速度就变的非常的慢 两个版本的对比 响应式编程风格 整理的一套资料 Junit5 准备好的资料 原文地址:https://www.cnblogs.com/wangjunwei/p/11372888.html

Spring MVC一事务控制问题

在最近一个项目中用了Spring MVC作为控制层框架,但却出现了一个让人很费解的问题:事务控制. Spring MVC的配置文件名为:springMVC-servlet.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/