美文网首页
第五章 Spring 事务

第五章 Spring 事务

作者: 水墨九 | 来源:发表于2022-01-16 12:06 被阅读0次

5.1事务

1、什么是事务?一些sql语句序列的集合,是多条sql,要作为一个整体来执行,要么全部成功,要么全部失败。

mysql执行事务:
beginTransaction//开始事务
insert into student ....;
select * from student ......
endTransaction//事务结束

2、什么时候需要使用事务?
一个操作需要多条(2条或者2条以上的sql),sql语句一起完成,操作才能完成。

5.2 在程序中事务在哪里说明

加载业务类的方法上面(public方法上面),表示业务放大执行时,需要事务的支持。

5.3 事务管理器

5.3.1不同的数据库访问技术,处理事务的方式是不同的

1)使用jdbc访问数据库,事务处理

public void Account(){
Connecton con = ..
con.setAutoCommit(false);
stat.insert();
stat.update;
con.commit();
con.setAutoCommit(true);
}

2)mybatis执行数据库操作,处理事务

public void updateAccount(){
    SqlSession session = SqlSession.openSession(false);
    try{
          session.insert("insert into ...");
          session.update("update ...");
          session.commit();
    }catch(Exception e){
      session.rollback():
    }
    
}

5.3.2 spring统一事务管理事务,把不同的数据库访问技术的事务处理统一起来

  使用spring的事务管理器,管理不同的数据库访问技术的事务处理,开发人员只需要掌握spring的事务处理一个方案,就可以实现使用不同的数据库访问技术的事务管理。
  管理事务面向的是spring,有spring管理事务,做事务的提交,事务的回滚。

5.3.3 Spring事务管理器

Spring框架使用事务管理器来管理事务,
事务管理器接口:PlatFormTransactionManager
作用:定义了事务的操作,主要是commit(),rollback()
事务管理器有很多实现类:一种数据库的访问技术有一个实现类,由实现类具体完成事务的提交、回滚
意味着:jdbc或者mybatis访问数据库有自己的事务管理器实现类:DATASourceTransactionManager
hibernate框架,他的事务管理器实现类:HibernateTransactionManager
事务管理器的工作方式:


事务管理的工作方式

5.3.4 事务的提交和回滚时机

什么时候提交、回滚事务?
当业务方法正常执行时,没有异常,事务自动提交。如果业务方法抛出了运行时异常,事务是回滚的。
异常的分类:
Error:严重错误,回滚
Exception:异常类,可以处理的异常情况
1、运行时异常:RuntimeException和他的子类都是运行时异常,在程序执行过程中抛出的异常。常见的运行时异常:NullPointException,NumberFormatException,IndexBoundException.......
2、受查异常:在编写java代码的时候,必须要处理的异常,例如:IOException,SQLException,FileNotFoundException....,受查异常默认是提交事务
总结
方法中抛出了运行时异常,回滚;其他情况(正常执行方法、受查异常)就提交事务

5.3.5 事务使用的AOP的环绕通知

环绕通知:在目标方法的前和后都能增强功能,不需要修改代码。

//spring给业务方法在执行时,增加上事务的切面方法
@Around("execution(  所有的业务方法类中的方法)")
public Object myAround(ProceedingJointPoint pjp){
     try{ 
              PlatformTransactionManager.beginTransaction()//使用spring的事务管理器去开启事务
              pjp.proceed();//执行目标方法
              PlatformTransactionManager.commit();//业务方法正常执行,提交事务
      }catch(Exception e ){
             PlatformTransactionManager.rollback();//回滚
      }
}

5.4 事务定义接口TransactionDefinition

该接口定义了三类常量,定义了有关事务控制的属性
事务的属性:
1、隔离级别
2、传播行为
3、事务的超时
给业务方法说明事务的属性和ACID不一样

5.4.1 隔离级别

控制事务之间影响程度的,有5个值,但实际只有4个隔离级别
1、default:采用DB默认的事务隔离级别。MySql的默认为repeatable_read,orcal的默认为:read_committed
2、read_uncommitted:读未提交。未解决任何并发问题
3、read_committed:读已提交。解决脏读、存在不可重复读与幻读
4、repeatable_read:可重复读,解决脏读、不可重复读、存在幻读
5、serializable:串行化,不存在并发问题(事务安全性最高,但是效率最低)

5.4.2 事务的超时时间

事务的超时时间是以秒为单位的,默认为-1。该时间是表示一个业务方法最长的执行时间。到达时间没有执行完毕,spring回滚事务。-1表示没有时间限制。

5.4.3传播行为

传播行为有7个值
传播行为:业务方法在调用时,事务在方法之间的传递和使用
使用传播行为,标志方法有无事务
1、propagation_required:Spring默认的传播行为,方法在调用的时候,如果存在事务,则使用当前的事务,如果没有事务,则新建事务,方法在新建事务中执行
2、propagation_supports:有事务可以执行,没有事务也可以执行(比如:查询操作)
3、propgation_required_new:方法需要一个新事务。如果在调用方法时,则原来的事务暂停,知道新事务执行完毕。如果方法调用时,没有事务,则新建一个事务,在新事务中执行代码。

5.5 Spring框架使用自己的注解Transactional控制事务

@Transactional注解,使用注解的属性来控制事务(隔离级别、传播行为、超时)

  • 属性:
    1、prooagation:事务的传播行为,他使用的是propagation类的枚举值。例如:propagation.required
    2、isolation:表示隔离级别,使用isolation类的枚举值,表示隔离级别
    3、readOnly:boolean类型的值,表示数据库操作是不只读的,默认是false。
    4、timeout:事务的超时时间,默认-1,整数值,单位是秒。例如timeout=20
    5、rollbackFor:回滚的异常类列表,他的值是一个数组,每个值是异常类的class。
    6、rollbackForClassName:表示回滚的异常类列表,他的值是异常类名称,是String类型的值
    7、noRollbackFor:指定不需要回滚的异常类,是class类型的
    8、noRollBackForClassName:不需要回滚的异常类列表,是String类型的
  • 位置
    1、在业务方法的上面,是在public方法的上面
    2、在类的方法
  • 注解的使用步骤
    1、在spring的配置文件中,声明事务的内容
      A、声明事务管理器,说明使用哪个事务管理器对象
      B、声明使用注解管理事务(开启事务注解驱动)
    2、在类的源代码中,加入@Transactional
    事务的控制模式:
    1、编程式,在代码中编程控制事务
    2、声明式事务,不用编码
    @Transactional 使用的特点:
    1、spring框架自己提供的事务控制
    2、适合中小型项目
    3、使用方便效率高

5.6 使用AspectJ框架

使用aspectj的aop,声明食物控制叫做声明式事务
使用步骤:
1、在pom文件中加入spring-aspects的依赖
2、在spring的配置文件中声明事务的内容
A、声明事务管理器
B、声明业务方法需要的事务属性
C、声明切入点表达式
声明式事务的优缺点
1、缺点:理解难,配置复杂
2、优点:代码和事务是分开配置的,控制事务源代码不需要修改
     能快速了解和掌控项目的全部事务,适合大型项目。

相关文章

  • 关于事务的思考

    Spring对于事务的支持 Spring事务接口 Spring事务管理器 Spring并不直接管理事务,而是提供多...

  • Spring事务

    Spring 事务 分类 Spring可以支持编程式事务和声明式事务。 编程式事务 实现 Spring使用事务管理...

  • Spring中实现事务方式

    Spring 中实现事务的方式 Spring 并不直接支持事务,只有当数据库支持事务时,Spring 才支持事务,...

  • Spring事务的传播特性引发的一场血案

    Spring事务的传播特性是对于Spring事务管理的一项特殊配置;Spring事务基于Spring AOP特性,...

  • Spring 事务实现分析

    1. Spring 事务简介 Spring 本身并不实现事务,Spring事务 的本质 还是 底层数据库 对事务的...

  • 第五章 Spring 事务

    5.1事务 1、什么是事务?一些sql语句序列的集合,是多条sql,要作为一个整体来执行,要么全部成功,要么全部失...

  • spring04

    Spring JdbcTemplate学习 Spring 声明式事务 xml配置实现 Spring 声明式事务 注...

  • 程序员之Spring

    1. Spring事务 spring的事务实现原理Spring事务将connection放入到当前线程的threa...

  • 面前温习

    Spring事务传播特性的浅析——事务方法嵌套调用的迷茫 解惑 spring 嵌套事务

  • 分布式事务(2)Spring事务

    2.1 Spring事务原理 Spring支持编程式事务和声明式事务。编程式事务就是用个事务类Transactio...

网友评论

      本文标题:第五章 Spring 事务

      本文链接:https://www.haomeiwen.com/subject/xitpcrtx.html