Spring事务

本文详细介绍了Spring中的声明式事务管理,包括事务属性、事务隔离级别、事务传播行为和回滚规则。通过注解@Transactional,可以在不侵入代码的情况下进行事务操作,提高代码的简洁性和可维护性。此外,还提到了@Transactional注解的注意事项,如仅对public方法生效,内部调用不受事务管理等。
摘要由CSDN通过智能技术生成

目录

一、声明式事务

事务属性介绍

事务隔离级别

脏读:

不可重复读:

幻读:

事务传播行为(Propagation)

事务常用配置

事务回滚规则

二、注解事务

注解方式使用

注意事项


一、声明式事务

Spring 的事务管理分为两种:

  • 编程式事务管理:通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。
  • 声明式事务管理:建立在 AOP 之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

声明式事务管理不需要入侵代码,并且提供了 @Transactional 注解更为简单、快捷地进行事务操作,推荐使用。

事务属性介绍

事务隔离级别

事务隔离级别指的是若干个并发的事务之间的隔离程度,一般可分为以下五个级别:

  • DEFAULT:默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这个值就是READ_COMMITTED。
  • READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。
  • READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
  • REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
  • SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

这里对脏读,不可重复读,幻读做个解释

脏读:

脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读。

 脏读最大的问题就是可能读到不存在的数据,就像上图所说,B的更新数据被A读取了,但是B回滚了,更新数据全部还原,就是说A刚刚被读到的数据并没有存在于数据库中。

不可重复读:

不可重复读指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况。

A 多次读取同一数据,但B在A多次读取的过程中&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值