Spring框架的事务

目录

一、spring事务

1、原子性:

2、一致性:

3、隔离性:

4、持久性:

二、spring事务的配置方式

1. 编程式事务管理

2. 声明式事务管理

三、spring的传播行为

四、spring的传播机制


一、spring事务

事务在代码里或者数据库中都可以配置。

其含义理解为 一系列的数据操作,要么全部执行完成、要么都不执行。归纳为

1、原子性:

事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

2、一致性:

一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败

3、隔离性:

事务之间应该隔离开来。因为可能有许多事务会同时处理相同的数据,每个事务都应该与其他事务有隔离策略。

4、持久性:

一旦事务完成,它的结果不会收到影响。通常情况下,事务的结果被写到持久化存储器中。

二、spring事务的配置方式

spring 在事务处理上支持编程式事务和声明式事务

1. 编程式事务管理

编程式事务管理是侵入性事务管理,使用TransactionTemplate或者直接使用PlatformTransactionManager,对于编程式事务管理,Spring推荐使用TransactionTemplate。

2. 声明式事务管理

声明式事务管理建立在AOP之上,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,执行完目标方法之后根据执行的情况提交或者回滚。

编程式事务每次实现都要单独实现,但业务量大功能复杂时,使用编程式事务无疑是痛苦的,而声明式事务不同,声明式事务属于无侵入式,不会影响业务逻辑的实现,只需要在配置文件中做相关的事务规则声明或者通过注解的方式,便可以将事务规则应用到业务逻辑中。

显然声明式事务管理要优于编程式事务管理,这正是Spring倡导的非侵入式的编程方式。唯一不足的地方就是声明式事务管理的粒度是方法级别,而编程式事务管理是可以到代码块的,但是可以通过提取方法的方式完成声明式事务管理的配置。

三、spring的传播行为

spring的7种传播行为:

1.required:(默认传播行为),如果当前有事务,其他就用当前事务,不会新增事务。
例如:方法A调用方法B,它们用同一个事务。(如果B没有事务,它们会用同一个事务。)(只要有一个回滚,整体就会回滚)

2.requires_new:如果当前有事务,其他不会加入当前事务,会新增事务。即他们的事务没有关系,不是同一个事务。
如果其他没有事务,那么以当前事务运行。
例如:方法A调用方法B,它们用不同的事务。(B不会用A的事务,会新增事务。)

3.supports:当前没有事务,就以非事务运行。当前有事务呢?就以当前事务运行。
例如:方法A调用方法B,如果A没有事务,那么B就以非事务运行。
如果A有事务就以A事务为准。如果A没有事务,那么B就会以非事务执行。

4.mandatory:其他没有事务就会抛异常。当前没有事务抛出异常,当前有事务则支持当前事务。
支持当前事务,如果当前没有事务就会抛出异常。
例如:方法A调用方法B,如果方法A没有事务,那么就会抛出异常。

5.not_supported:以非事务执行。
例如:方法A调用方法B,方法B会挂起事务A以非事务方式执行。

6.never:以非事务执行,如果存在事务,抛出异常。
总是以非事务执行,如果存在事务,那么就抛出异常。

7.nested:如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。
如果当前事务不存在,那么其行为与Required一样。
例如:方法A中调用了方法B,B中try catch手动回滚,A不会回滚

四、spring的传播机制

       ISOLATION_READ_UNCOMMITTED:读未提交

  ISOLATION_READ_COMMITTED:读已提交

  ISOLATION_REPEATABLE_READ:可重复读

  ISOLATION_SERIALIZABLE:串行化

  ISOLATION_DEFAULT:默认的隔离级别(不解释)

脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的

幻读:A事务读取B事务提交的新增数据,会引发幻读问题。幻读一般发生在计算统计数据的事务中.

例如:银行系统在同一个事务中两次统计存款账户的总金额,在两次统计中,刚好新增了一个存款账户,存入了100,这时候两次统计的总金额不一致。

不可重复读:不可重复读是指A事务读取了B事务已经提交的更改数据。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值