Spring事务的传播特性以及事务的隔离级别

本文详细介绍了Spring框架中的事务管理,包括事务的四大特性(ACID)、传播特性,以及如何在事务通知中配置传播属性。此外,文章还讲解了Spring支持的事务隔离级别,如READ_COMMITTED、SERIALIZABLE等,并讨论了如何设置隔离级别、超时和只读事务属性,以优化事务性能。最后,阐述了事务的回滚规则,包括哪些异常会导致事务回滚。

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

Spring事务的传播特性以及事务的隔离级别

一:事务的简介

事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性

事务就是一系列的动作,它们被当做一个单独的工作单元,这些动作要么全部完成,要么全部不起作用

二:事务的四个关键属性(ACID),和oracle相似

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

2:一致性:一旦所有事务动作完成,事务就被提交,数据和资源就处于一种满足业务规则的一致性状态中。

3:隔离性:可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据破坏。

4:持久性:一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,通常情况下,事务的结果被写到持久化存储器中。

三:事务的传播特性,

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。

事务方法之间存在父子关系。

例如:方法可能继续在现有的事务中运行,也可能开启一个新事务,并在自己的事务中运行。

下面是spring中的7中类传播行为:

1REQUIRED:如果有事务,当前的方法就在这个事务中运行,否则就开启一个新的事务,并且在自己的事务内运行

2:REQUIRES_NEW: 不管父方法是否存在事务 都会新建事务

3:SUPPORTS:父方法存在spring事务 使用当前spring事务 没有spring事务 就使用jdbc事务(自动提交)

4:NOT_SUPPORTED:不管父类中是否有spring事务,都不会使用spring事务,会使用jdbc事务(自动提交或回滚)

5:MANDATORY :必须在spring事务环境下运行,父方法没有事务,抛出异常

6:NEVER :父方法不能存在spring事务 如果有会抛出异常

7NESTED:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则就启动一个新的事务,并在它自己的事务内运行。

:事务通知中配置传播属性

可以像下面这样在<tx:method>元素中设定传播事务属性。

 

五:spring支持的事务的隔离级别

 

事务的隔离级别要得到底层数据库引擎的支持,而不是应用程序或者框架的支持。

Oracle支持的两种事务隔离级别:READ_COMMITED , SERIALIZABLE

Mysql支持四种事务隔离级别

六:设置隔离事务属性。

也可以在<tx:method>元素中指定隔离级别,通过isolation=””来设置。

 

七:超时和只读属性

由于事务可以在行和表上获得锁,  因此长事务会占用资源, 并对整体性能产生影响.

如果一个事务只读取数据但不做修改, 数据库引擎可以对这个事务进行优化.

超时事务属性: 事务在强制回滚之前可以保持多久. 这样可以防止长期运行的事务占用资源.

只读事务属性: 表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务

八:设置超时和只读事务属性

 

Mysql默认10soracle永不超时。

:设置回滚事务属性

回滚事务是在事务遇到运行时异常时发生,非运行时异常不会发生。

Rollback-for=”异常” 指定会自动回滚的非运行时异常

No-rollback-for=”” 指定某些运行时异常不回滚。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值