Spring事务的1+3种实现方式、7种传播行为、4种隔离级别

本文深入探讨了Spring框架中事务管理的四种实现方式,包括编程式、声明式等,并详细解释了七种事务传播行为及四种隔离级别的应用场景与原理。通过具体示例,帮助读者理解如何在不同场景下正确配置和使用Spring事务。

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

Spring事务的1+3种实现方式、7种传播行为、4种隔离级别:
1)编程式事务管理:调用beginTransaction()、commit()、rollback()等事务管理相关的方法
2)声明式事务管理:基于TransactionProxyFactoryBean的声明式事务管理:–很少使用
3)声明式事务管理:基于AspectAOP声明式事务管理:–常使用
4)声明式事务管理:基于注解@Transaction的声明式事务管理:–经常使用

1)propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。Spring默认的事务传播行为
2)propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
3)propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
4)propagation_required_new:新建事务,如果当前事务存在,把当前事务挂起。
5)propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6)propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
7)propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作。
注:Spring事务的嵌套解析—-Spring的事务传播策略在内部方法调用时将不起作用

Spring的事务传播策略在两个不同的Service调用时会起作用
class ServiceA {
void methodA() {ServiceB.methodB();}
}
class ServiceB {
void methodB() {… }
}
如果ServiceA.methodA已经起了事务,调用ServiceB.methodB时,B不新起事务,如果A没有事务,则B新建一个事务,B回滚A也回滚。

1)读未提交:T1读取T2未提交的东西,会出现脏读,不可重复读,幻读
2)读已提交:mysql默认,会出现不可重复读和幻读
3)可重复读:针对的是update操作,但是会出现幻读现象,幻读针对的是insert操作
4)串行化:解决了脏读、不可重复读和幻读,但是效率比较低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值