链接: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. Educational Codeforces Round 51 (Rated for Div. 2) G. Distinctification(线段树合并 + 并查集)

    题意 给出一个长度为 \(n\) 序列 , 每个位置有 \(a_i , b_i\) 两个参数 , \(b_i\) 互不相同 ,你可以进行任意次如下的两种操作 : 若存在 \(j \not = i\) ...

  2. RequestContextHolder 很方便的获取 request

    在 Spring boot web 中我们可以通过 RequestContextHolder 很方便的获取 request. ServletRequestAttributes requestAttri ...

  3. photoshop学习3

    一.仿制图章工具 快捷键:S. 操作:先按住ALT键,再点击图片的一个地方,然后松开ALT和鼠标(这叫取样).之后到画布的另一个地方用鼠标绘画. 特点:绘画出和取样点一样的图像.这个工具原样复制了取样 ...

  4. HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)

    迷宫城堡Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  5. IncDec Sequence(差分)

    题意:给定一个序列,可以对一个区间进行加1或减1的操作,问最少需要多少次可以将序列的值一样. Solution 我们将序列差分,得到一个差分数组. 对于每一个区间操作,我们可以把它转化为在查分数组上某 ...

  6. servlet 会话技术

    一.控制器: 1.如何去确定需要一个新的控制器? 原则:一类事务请求需要一个控制器. 二.会话: 用户开一个浏览器,访问一个网站,只要该浏览器不关闭浏览器,不管该用户点击了多少个超链接,访问了多少个资 ...

  7. GNOME 3.28 启用桌面图标

    原由 GNOME 3.28合并了移除桌面图标支持 Nautilus从此不在支持桌面图标,直到找到新的解决方案 Issues地址:https://gitlab.gnome.org/GNOME/nauti ...

  8. COGS 2392 2393 2395 有标号的二分图计数

    有黑白关系: 枚举左部点(黑色点),然后$2^{i*(n-i)}$处理方法同:COGS 2353 2355 2356 2358 有标号的DAG计数 无关系: 发现,假设$f(i)$是一个连通块,对于一 ...

  9. [FWT] UOJ #310. 【UNR #2】黎明前的巧克力

    [uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...

  10. (转)你应该知道的RPC原理

    背景:对于项目中的RPC框架,仅仅停留在使用层面,对于其底层的实现原理不是很清楚.这样的后果是很危险的,对于面试官来说,跟不知道这个东西一样. 转载自:https://www.cnblogs.com/ ...