Spring事务的学习笔记

### 事务的特性:(什么叫做事务,说白了就是会回滚业务)
1、原子性:要么都成功,要么都失败。
2、一致性:事务的执行前后数据的完整性要一致。
3、隔离性:并发条件下不会出现脏读等现象。
4、持久性:提交了就是提交了,数据就修改成功了。

###事务的隔离级别:
1、默认(DEFAULT):是Spring框架根据不同的数据库来采用同的级别
2、READ_UNCOMMITED:允许读取还未提交的改变数据,可能导致脏读,幻读,不可重复读。
3、READ_COMMITTED:允许在并发事务已经提交后读取,可防止脏读,但是幻读和不可重复读仍然会发生。
4、REPEATABLE_READ:对相同字段的毒刺读取是一致的,除非事务被事务本身改变,可防止脏、不可重复读,但是幻读仍然会发生(Mysql是默认的这种状态)
5、SERIALIZABLE:完全服从ACID的隔离级别,确保不发生脏读,幻读,不可重复读,在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。

###事务的传播行为
事务的传播行为是分以下这些,主要是三块
这里写图片描述

这些行为的用途和用法都分别对应的业务那些环境呢,简单分析下,用下图来说话
这里写图片描述

根据上图可以知道,这个业务层会有两个业务a和b,这两个业务都有自己的事务,那么,当我们在web层调用业务层的这两个方法的时候,对于a和b来说,自己本身有的有事务,有的没事务,但是针对web层同事调用来说具体使用a的事务还是b的事务就是个问题。所以才会有了事务的七种传播行为,,现在来具体的分析。

首先先来一个样例,这个样例明显的介绍了A服务和B服务的关系,如下图所示
这里写图片描述
其中 当我们使用A服务的时候,我们就同时调用了B服务。基于这个,我写了三个类,分别是A服务,B服务,测试类,

A服务类

B服务类

测试类

根据以上图片我们正好来测试一下事务传播的第一个

PROPAGATION_REQUIRED :
如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

注意:这段话说的是“当前”,也就是说这个事务的规定是相对而言的,相对上一层调用的来说,例如,A调用B,A规定了事务的,那么就用A的,如果A没有规定事务,那么B就自己单独起来一个事务。

PROPAGATION_SUPPORTS :
支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘

这个一般都不用吧,都是需要事务来管理的

PROPAGATION_MANDATORY:
支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

这个用的也是比较少

PROPAGATION_REQUIRES_NEW:
创建新事务,无论当前存不存在事务,都创建新事务。

A调用B,无论A是什么事务,都创建新的事务,
这个还是比较重要的,基本都会用到

PROPAGATION_NOT_SUPPORTED:
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER:
以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED:
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的开发方式,通过依赖注入和面向切面编程等特性,简化了Java应用程序的开发过程。 以下是关于Spring学习的一些笔记: 1. IoC(控制反转):Spring通过IoC容器管理对象的创建和依赖关系的注入。通过配置文件或注解,将对象的创建和依赖关系的维护交给Spring容器来管理,降低了组件之间的耦合度。 2. DI(依赖注入):Spring通过依赖注入将对象之间的依赖关系解耦。通过构造函数、Setter方法或注解,将依赖的对象注入到目标对象中,使得对象之间的关系更加灵活和可维护。 3. AOP(面向切面编程):Spring提供了AOP的支持,可以将与业务逻辑无关的横切关注点(如日志、事务管理等)从业务逻辑中分离出来,提高了代码的可重用性和可维护性。 4. MVC(模型-视图-控制器):Spring提供了一个MVC框架,用于构建Web应用程序。通过DispatcherServlet、Controller、ViewResolver等组件,实现了请求的分发和处理,将业务逻辑和视图展示进行了分离。 5. JDBC和ORM支持:Spring提供了对JDBC和ORM框架(如Hibernate、MyBatis)的集成支持,简化了数据库访问的操作,提高了开发效率。 6. 事务管理:Spring提供了对事务的支持,通过声明式事务管理和编程式事务管理,实现了对数据库事务的控制和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值