您的位置:首页 > 编程语言 > Java开发

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

2017-11-08 11:01 169 查看

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

一:事务的简介

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

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

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

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

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

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

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

三:事务的传播特性,

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

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

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

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

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

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

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

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

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

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

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

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

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

 


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

 


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

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

Mysql支持四种事务隔离级别

六:设置隔离事务属性。

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

 


七:超时和只读属性

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

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

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

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

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

 


Mysql默认10s,oracle永不超时。

九:设置回滚事务属性

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

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

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: