Spring事务管理:核心接口讲解

简介: Spring事务管理:核心接口讲解

事务:

事务:是逻辑上一组操作,要么全都成功,要么全都失败.

事务特性:ACID

ACID,指数据库事务正确执行的四个基本要素的缩写。

包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

 

  • 原子性(Atomicity):事务不可分割
  • 一致性(Consistency):事务执行的前后,数据完整性保持一致.
  • 隔离性(Isolation):一个事务执行的时候,不应该受到其他事务的打扰
  • 持久性(Durability):一旦结束,数据就永久的保存到数据库.

(1)原子性(Atomicity)

  • 事务最基本的操作单元,要么全部成功,要么全部失败,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。

(2)一致性(Consistency)

  • 事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

(3)隔离性(Isolation)

  • 指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

(4)持久性(Durability)

  • 指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。


如果不考虑隔离性:

 

  • 脏读:一个事务读到另一个事务未提交数据
  • 不可重复读:一个事务读到另一个事务已经提交数据(update)导致一个事务多次查询结果不一致
  • 虚读:      一个事务读到另一个事务已经提交数据(insert)导致一个事务多次查询结果不一致


事务的隔离级别:

 

  • 未提交读:以上情况都有可能发生。
  • 已提交读:避免脏读,但不可重复读,虚读是有可能发生(Oracle)。
  • 可重复读:避免脏读,不可重复读,但是虚读有可能发生(MySQL)。
  • 串行的:避免以上所有情况.
  • 默认级别. Mysql  repeatable_read        oracle read_commited


Spring中事务管理:

分层开发:事务处在Service层.


Spring提供事务管理API:

 

PlatformTransactionManager:平台事务管理器.

常用方法:

 

 

 

TransactionDefinition:事务定义

ISOLation_XXX:事务隔离级别.

PROPAGATION_XXX:事务的传播行为.(不是JDBC中有的,为了解决实际开发问题.)

过期时间:

 

 

TransactionStatus:事务状态

是否有保存点

是否一个新的事务

事务是否已经提交

 

关系:PlatformTransactionManager通过TransactionDefinition设置事务相关信息管理事务,

管理事务过程中,产生一些事务状态:状态由TransactionStatus记录.


Spring事务管理API详解:

 

PlatformTransactionManager:接口.

Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现


TransactionDefinition:

事务隔离级别(四种)


事务传播行为(七种)

 传播行为:解决业务层之间的调用的事务的关系.

  1. PROPAGATION_REQUIRED:支持当前事务,如果不存在 就新建一个
  1. * A,B 如果A有事务,B使用A的事务,如果A没有事务,B就开启一个新的事务.(A,B是在一个事务中。)
  1. PROPAGATION_SUPPORTS:支持当前事务,如果不存在,就不使用事务
  1. * A,B 如果A有事务,B使用A的事务,如果A没有事务,B就不使用事务.
  1. PROPAGATION_MANDATORY:支持当前事务,如果不存在,抛出异常
  1. * A,B 如果A有事务,B使用A的事务,如果A没有事务,抛出异常.
  1. PROPAGATION_REQUIRES_NEW如果有事务存在,挂起当前事务,创建一个新的事务
  1. * A,B 如果A有事务,B将A的事务挂起,重新创建一个新的事务.(A,B不在一个事务中.事务互不影响.)
  1. PROPAGATION_NOT_SUPPORTED以非事务方式运行,如果有事务存在,挂起当前事务
  • * A,B 非事务的方式运行,A有事务,就会挂起当前的事务.
  1. PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
  2. PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行
  3. * 基于SavePoint技术.

         * A,B A有事务,A执行之后,将A事务执行之后的内容保存到SavePoint.B事务有异常的话,

         用户需要自己设置事务提交还是回滚.

 


目录
相关文章
|
7天前
|
Java API 微服务
【Spring Boot系列】通过OpenAPI规范构建微服务服务接口
【4月更文挑战第5天】通过OpenAPI接口构建Spring Boot服务RestAPI接口
|
1月前
|
传感器 Java API
Spring揭秘:Aware接口应用场景及实现原理!
Aware接口赋予了Bean更多自感知的能力,通过实现不同的Aware接口,Bean可以轻松地获取到Spring容器中的其他资源引用,像ApplicationContext、BeanFactory等。 这样不仅增强了Bean的功能,还提高了代码的可维护性和扩展性,从而让Spring的IoC容器变得更加强大和灵活。
127 0
Spring揭秘:Aware接口应用场景及实现原理!
|
1月前
|
Java 数据库 Spring
【spring(四)】Spring事务管理和@Transactional注解
【spring(四)】Spring事务管理和@Transactional注解
|
1月前
ssm(Spring+Spring mvc+mybatis)Dao接口——IDeptDao
ssm(Spring+Spring mvc+mybatis)Dao接口——IDeptDao
8 0
|
1月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
9 0
|
1月前
|
存储 Java 数据处理
Spring揭秘:ClassPathScanningProvider接口应用场景及实现原理!
ClassPathScanningCandidateComponentProvider是Spring框架中一个非常核心的类,它主要用于在类路径下扫描并发现带有特定注解的组件,支持诸如@ComponentScan、@Component、@Service、@Repository和@Controller等注解的自动扫描和注册。
Spring揭秘:ClassPathScanningProvider接口应用场景及实现原理!
|
1月前
|
Java API 开发者
Spring揭秘:BeanDefinitionBuilder接口应用场景及实现原理!
BeanDefinitionBuilder类为Spring框架中的Bean定义提供了灵活且强大构建方式,通过API,开发者能够轻松创建和配置Bean,无需依赖繁琐的XML配置或注解。
Spring揭秘:BeanDefinitionBuilder接口应用场景及实现原理!
|
1月前
|
Java API 对象存储
Spring揭秘:AnnotationMetadata接口应用场景及实现原理!
AnnotationMetadata接口可以轻松获取类、方法或字段上的注解信息,简化注解处理,提供一致且灵活的访问方式,支持运行时处理,让开发者能更专注于业务逻辑而非底层细节,从而加速开发进程。
Spring揭秘:AnnotationMetadata接口应用场景及实现原理!
|
1月前
|
XML Java 数据库
【二十四】springboot整合spring事务详解以及实战
【二十四】springboot整合spring事务详解以及实战
106 0
|
1月前
|
存储 Java API
Spring揭秘:Environment接口应用场景及实现原理!
Environment接口提供了强大且灵活的环境属性管理能力,通过它,开发者能轻松地访问和配置应用程序运行时的各种属性,如系统属性、环境变量等。 同时,Environment接口还支持属性源的定制和扩展,使得开发者能根据实际需求灵活地定制属性的加载和解析方式。
Spring揭秘:Environment接口应用场景及实现原理!