Spring事务总结

本文主要介绍了Spring事务的ACID特性,包括事务的四个隔离级别及其防止的问题,如脏读、不可重复读和幻读。此外,还讨论了事务的超时时间、只读属性以及传播机制的七种类型。接着,提到了Spring事务的回滚机制,并阐述了Springboot中启用事务管理的方法。最后,简要提及了编程式事务管理,特别是如何使用transactionTemplate进行细粒度的事务控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring事务的ACID
事务的ACID分别指的是原子性、一致性、隔离性、持久性,spring事务中定义了如下属性用于实现事务的ACID特性

  • 事务名称
  • 隔离级别(4种)
    • ISOLATION_READ_UNCOMMITTED:运行B事务看到A事务未提交的数据,会造成脏读、不可重复读和幻像读。
    • ISOLATION_READ_COMMITTED:事务B只能看到其他事务已提交后的数据状态,解决的了脏读,会造成不可重复读+幻读
    • ISOLATION_REPEATABLE_READ:该级别解决了脏读、不可重复读,但是存在幻读,其解决不可重复读的原理如下:
      • select … from :该Repeatable-read的算法处理中,在同一个事物内多次读取,则取第一次读取时建立的快照版本
    • ISOLATION_SERIALIZABLE:这是事务的最高隔离级别,底层实现是通过对每一行读取的数据加共享锁(Lock in Share Mode)实现,容易造成事务超时与锁竞争
  • 超时时间
  • 是否只读(ReadOnly)
  • 传播机制(7种)
    • REQUIRED:存在事务则加入,不存在则新建
    • SUPPORT:存在事务则加入,不存在则以非事务执行
    • MANDATIORY:存在事务则加入,不存在则抛出异常
    • REQUIRES_NEW:存在事务则挂起,新建一个事务执行处理
    • NOT_SUPPORTED:存在事务则挂起,以非事务执行,
    • NEVER:存在事务则抛出异常
    • NESTED:存在则嵌套,不存在则创建新的事务
  • 回滚机制

Spring事务的应用

在默认的数据库事务中,每执行一次数据库操作都封装在一个事务中,若操作成功则提交事务,若失败则回滚,类似于使用jdbc编程中的获取到Connection后,执行connection.setAutoCommit(false);在执行完毕后进行connection.commit();

Springboot中开启的方式为在启动类中引入注解@EnableTransactionManagement,用于配置申明式事务

@SpringBootApplication
@EnableTransactionManagement //开启spring事务
public class DmUtilsApplication {
   
   
    public static void main(String[] args) {
   
   

        SpringApplication.run(DmUtilsApplication.class,args);
    }
}
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值