事务。spring中基于xml配置事务和基于注解配置事务

概念:

事务是

指逻辑上的一组操作,组成这组操作的一系列操作要么全部成功,要么一个都不做。因此,事务的结束有两种,当事务中的所有操作全部成功执行时,事务提交。如果其中一个操作失败,将发生回滚操作,撤消到事务开始时的状态。
针对数据库,存储数据,要么成功,要么失败。

事务的特性:

  1. 原子性: 每一个事务都是不可再分割的,即使有多条语句,也是一个整体。要么一起成功,要么一起失败
  2. 一致性:执行事务的前后,数据库的状态应该是一致的。比如转账前后,数据库的总金额是一样的
  3. 隔离性:如果同时又几个事务同时在数据库中运行,互不影响。
  4. 持久性:事务一旦执行成功,对数据库的影响是持久性的。即使关机。

事务的隔离级别

一般理想状态下,事务的操作是互补干涉的。
但是并发访问会产生一下三个问题

  1. 脏读:一个事务中,读取到了另一个事务未提交的数据。当数据还在内存中没有写入硬盘,被读取,但是数据从内存中消失。
  2. 幻读:一个事务中,两次读取的数据数量不一致。这样是由于删除(delete)和添加(insert)造成的。比如A事务查询工资为1000的员工有5人,但是此时B事务插入一条1000工资的员工,则A读取的就变成了6条,从而造成了幻读。
  3. 不可重复读:A事务多次读取数据时,B事务对数据进行了修改,因而读到的数据不一致。也就是不可重复读。这个时由改(update)造成的。

为了解决上述三个并发问题。就要用到事务的隔离级别

  1. serializable(串行化):可以解决所有问题,但是效率低。也叫锁表。
  2. repeatable read(可重复读):可以解决脏读,不可复读。mysql默认这中级别
  3. read committed(读已提交):解决脏读。Oracle和SQL Server
  4. read uncommitted(读未提交):级别最低,任何都无法保证,效率最高,最不安全。

编程式事务

使用Java代码手动进行开启事务、提交事务、回滚事务。
编程式事务的三个相关类

1 PlatformTransactionManager

下图有详细的介绍。
我理解的就是一个平台事务管理器,每一种技术对事务的实现不同,就是说明这个事务时基于哪个平台的。
事务。spring中基于xml配置事务和基于注解配置事务_第1张图片

2 TransactionDefinition

定义事务属性的对象。
事务。spring中基于xml配置事务和基于注解配置事务_第2张图片
主要包含了事务的隔离级别和事务的传播行为

隔离级别

上面做了具体阐述
事务。spring中基于xml配置事务和基于注解配置事务_第3张图片

传播行为

事务。spring中基于xml配置事务和基于注解配置事务_第4张图片

3 TransactionStatus

事务。spring中基于xml配置事务和基于注解配置事务_第5张图片

声明式事务

AOP+编程式事务

xml配置声明式事务

  1. 配置平台事务管理器:spring不知道我们底层是用 的什么框架管理事务的。配置平台事务管理器
  2. 为spring提供的通知配置对应的配置信息,指定哪些方法需要被如何增强事务。spring中基于xml配置事务和基于注解配置事务_第6张图片 各个标签详解事务。spring中基于xml配置事务和基于注解配置事务_第7张图片
  3. 织入织入

注解配置声明式事务

  1. 配置平台事务管理器
  2. 在要执行事务的方法和类上加@Transactionalzhujie注解
  3. 启用注解配置事务tx:annotation-driven/启用注解配置

你可能感兴趣的:(架构分类)