Spring事务传播行为和隔离级别

本文介绍了Spring框架中的事务管理特性,包括7种传播行为和5种隔离级别。详细解释了每种传播行为的作用及应用场景,并说明了隔离级别的不同设置对事务的影响。

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

Spring的事务有7个传播行为和5个隔离级别。

Spring的事务传播行为

propagation:Spring的事务传播属性,分为七种传播行为。之所以会有这个概念,是因为可能在一个被事务管理的方法中调用了另一个被事务管理的方法,如下:

class ServiceA{
    void methodA(){
            new ServiceB().methodB();
    }
}

class ServiceB{
    void methodB(){
    }
}

PROPAGATION_REQUIRED

支持当前事务,如果当前存在事务则加入该事务;如果当前没有事务,则会新建一个事务。这是默认的事务传播行为,也是最常见的选择。

Spring的事务传播行为1

PROPAGATION_SUPPORTS

支持当前事务,如果当前没有事务,则以非事务方式执行。

PROPAGATION_MANDATORY

支持当前事务,如果当前没有事务,则会抛出异常。

PROPAGATION_REQUIRES_NEW

新建一个事务,如果当前存在事务,则会将其挂起。

Spring的事务传播属性2

PROPAGATION_NOT_SUPPORTED

不支持事务,以非事务方式执行操作,如果当前存在事务,则会将其挂起。

PROPAGATION_NEVER

不支持事务,如果当前存在事务,则会抛出异常。

PROPAGATION_NESTED

如果当前存在事务,则运行在一个嵌套的事务中;如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

该传播行为与PROPAGATION_REQUIRES_NEW的区别是:

前者的事务是嵌套的,属于当前事务的子事务,它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。如果父事务commit或rollback,内嵌事务也会commit或rollback。

后者新建的事务与原本事务是各自独立的,会将原本的事务挂起,当自身结束时原本的事务才会继续执行。

Spring的事务隔离级别

isolation:Spring事务的隔离级别属性,有5种隔离级别。实际上事务的隔离级别并不是由Spring容器决定的,而是由底层数据库决定的。

ISOLATION_DEFAULT

使用数据库默认的事务隔离级别。

ISOLATION_READ_UNCOMMITTED

读未提交,会发生脏读、不可重复读、幻读

ISOLATION_READ_COMMITTED

读提交,会发生不可重复读、幻读

ISOLATION_REPEATABLE_READ

可重复读,会发生幻读

ISOLATION_SERIALIZABLE

可串行化,不会发生脏读、不可重复读、幻读

  • 有想了解数据库的事务隔离级别的可以参考这篇文章

转载链接

浅析Spring事务传播行为和隔离级别

浅谈Spring事务隔离级别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值