链接:https://www.nowcoder.com/questionTerminal/1c65d30e47fb4f59a5e5af728218cac4?orderByHotValue=2&pos=5&mutiTagIds=637
来源:牛客网

事务属性的种类:


 


传播行为、隔离级别、只读和事务超时


 


a)



传播行为定义了被调用方法的事务边界。


 


传播行为


意义


PROPERGATION_MANDATORY


表示方法必须运行在一个事务中,如果当前事务不存在,就抛出异常


PROPAGATION_NESTED


表示如果当前事务存在,则方法应该运行在一个嵌套事务中。否则,它看起来和
PROPAGATION_REQUIRED


看起来没什么俩样


PROPAGATION_NEVER


表示方法不能运行在一个事务中,否则抛出异常


PROPAGATION_NOT_SUPPORTED


表示方法不能运行在一个事务中,如果当前存在一个事务,则该方法将被挂起


PROPAGATION_REQUIRED


表示当前方法必须运行在一个事务中,如果当前存在一个事务,那么该方法运行在这个事务中,否则,将创建一个新的事务


PROPAGATION_REQUIRES_NEW


表示当前方法必须运行在自己的事务中,如果当前存在一个事务,那么这个事务将在该方法运行期间被挂起


PROPAGATION_SUPPORTS


表示当前方法不需要运行在一个是事务中,但如果有一个事务已经存在,该方法也可以运行在这个事务中


 


 


 


 


b)



隔离级别


在操作数据时可能带来
3


个副作用,分别是脏读、不可重复读、幻读。为了避免这
3


中副作用的发生,在标准的
SQL


语句中定义了
4


种隔离级别,分别是未提交读、已提交读、可重复读、可序列化。而在
spring


事务中提供了
5


种隔离级别来对应在
SQL


中定义的
4


种隔离级别,如下:


隔离级别


意义


ISOLATION_DEFAULT


使用后端数据库默认的隔离级别


ISOLATION_READ_UNCOMMITTED


允许读取未提交的数据(对应未提交读),可能导致脏读、不可重复读、幻读


ISOLATION_READ_COMMITTED


允许在一个事务中读取另一个已经提交的事务中的数据(对应已提交读)。可以避免脏读,但是无法避免不可重复读和幻读


ISOLATION_REPEATABLE_READ


一个事务不可能更新由另一个事务修改但尚未提交(回滚)的数据(对应可重复读)。可以避免脏读和不可重复读,但无法避免幻读


ISOLATION_SERIALIZABLE


这种隔离级别是所有的事务都在一个执行队列中,依次顺序执行,而不是并行(对应可序列化)。可以避免脏读、不可重复读、幻读。但是这种隔离级别效率很低,因此,除非必须,否则不建议使用。


 


 


 


 


c)



只读


如果在一个事务中所有关于数据库的操作都是只读的,也就是说,这些操作只读取数据库中的数据,而并不更新数据,那么应将事务设为只读模式(
READ_ONLY_MARKER



,


这样更有利于数据库进行优化




因为只读的优化措施是事务启动后由数据库实施的,因此,只有将那些具有可能启动新事务的传播行为
(PROPAGATION_NESTED



PROPAGATION_REQUIRED



PROPAGATION_REQUIRED_NEW)


的方法的事务标记成只读才有意义。


如果使用
Hibernate


作为持久化机制,那么将事务标记为只读后,会将
Hibernate



flush


模式设置为
FULSH_NEVER,


以告诉
Hibernate


避免和数据库之间进行不必要的同步,并将所有更新延迟到事务结束。


d)



事务超时


如果一个事务长时间运行,这时为了尽量避免浪费系统资源,应为这个事务设置一个有效时间,使其等待数秒后自动回滚。与设


置“只读”属性一样,事务有效属性也需要给那些具有可能启动新事物的传播行为的方法的事务标记成只读才有意义。

Spring事物的属性的更多相关文章

  1. Spring 事物注解属性

    @Transactional属性 . propagation 事物的传播属性 . isolation 事物的隔离属性 . readonly 设置只读属性 . timeout 设置超时属性 . roll ...

  2. spring事物传播属性

    PROPAGATION_REQUIRED Support a current transaction; create a new one if none exists.  支持一个当前事务;如果不存在 ...

  3. spring事物的七种事物传播属性行为及五种隔离级别

    首先,说说什么事务(Transaction). 事务,就是一组操作数据库的动作集合.事务是现代数据库理论中的核心概念之一.如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务.当 ...

  4. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

  5. spring事物的传播行为

    1.spring事物的传播行为,主要是用来解决业务层拥有事物的方法,相互调用的问题. 2.声明事物, 在代码执行前,开启事务.代码执行完,提交事务 3.spring并没有提供事务具体的处理,而只是调用 ...

  6. Spring 事物Transaction

    日常开发中Spring 为我们提供了两种事物的定义方式 XML 配置 方式 :这种方式配置起来比较麻烦,但后期比较好进行维护 注解方式:配置起来比较方便,也是日常开发常用的: 我们这里进行第二种注解的 ...

  7. 细说spring事务配置属性

    一.spring事务配置 1.spring配置 在配置数据源的下方配置 <!-- 事务配置 --> <bean id="transactionManager" c ...

  8. spring事物深入了解

    1.问题 1.以前对事物的了解只是停留在声明式事物,配置xml,或使用注解,事物的传播行为也只用过REQUIRED和SUPPORTS,可以说对事物的了解很模糊. 2.直到在开发中遇到问题.. 问题的描 ...

  9. spring 事物的一些理解

    推荐一个我认为Spring事物写得很好的文章. 文章链接:http://www.codeceo.com/article/spring-transactions.html  文章作者:码农网 – 吴极心 ...

随机推荐

  1. 搭建gogs常见问题

    1.无法连接ssh,显示connection refuse. 原因是“custom/conf/app.ini”没有开启ssh功能,改为以下配置就行了  START_SSH_SERVER = true ...

  2. Docker 私有仓库 Harbor registry 安全认证搭建 [Https]

    Harbor源码地址:https://github.com/vmware/harborHarbort特性:基于角色控制用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限.基于镜像的复 ...

  3. JXOI 2017 简要题解

    「JXOI2017」数列 题意 九条可怜手上有一个长度为 \(n\) 的整数数列 \(r_i\) ,她现在想要构造一个长度为 \(n\) 的,满足如下条件的整数数列 \(A\) : \(1\leq A ...

  4. Speech语音播报

    System.Speech 这个命名空间,报可以阅读文字和播放音频. 环境  W10 VS2017 CMMT 1.添加程序集引用 System.Speech 2.实例化播音类,并且播放一个文本 Spe ...

  5. 新建WINDOWS服务C#

    当前作业环境 Windows8.1 | Visual Studio 2013 一. 建立项目,选择"Windows服务"模板 二. 查看生成的项目,结构很像WinForm的项目,其 ...

  6. Squid代理服务部署

    构建Squid代理服务器1.配置IP地址 2.编译安装Squid软件[root@localhost ~]# tar -zxvf squid-3.4.6.tar.gz -C /usr/src/[root ...

  7. Fiddler 安装配置及使用技巧

    下载最新版即可: https://www.telerik.com/fiddler pc配置: pc端上的配置较为简单,主要是记录一下遇到的一些bug以及解决方法. options>HTTPS  ...

  8. 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat

    题意:四个操作,区间加,区间每个数乘,区间的数变成 2^64-1-x,求区间和. 题解:2^64-1-x=(2^64-1)-x 因为模数为2^64,-x%2^64=-1*x%2^64 由负数取模的性质 ...

  9. A1113. Integer Set Partition

    Given a set of N (> 1) positive integers, you are supposed to partition them into two disjoint se ...

  10. (转)多线程——继承Thread 类和实现Runnable 接口的区别

    java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...