事务隔离和传播

标签: 事务隔离 传播 | 发表时间:2014-03-18 18:21 | 作者:hailongshih
出处:http://www.iteye.com
- Spring中事务的Propagation(传播性)的取值
    -- PROPAGATION_REQUIRED
       -- 加入当前已有事务;只有当前没有事务才起一个新的事务
       比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于ServiceA.methodA的时候,ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.methodB看到自己已经运行在ServiceA.methodA的事务内部,就不再起新的事务。而假如ServiceA.methodA运行的时候发现自己没有在事务中,它就会为自己分配一个事务。这样,在ServiceA.methodA或者在ServiceB.methodB内的任何地方出现异常,事务都会被回滚。
    -- PROPAGATION_SUPPORTS
       -- 如果当前在事务中,即以事务的形式运行,如果当前不在一个事务中,那么就以非事务的形式运行
    -- PROPAGATION_MANDATORY
       -- 必须在一个事务中运行。也就是说,只能被一个父事务调用。否则,就要抛出异常。
    -- PROPAGATION_REQUIRES_NEW
       -- 比如我们设计ServiceA.methodA的事务级别为PROPAGATION_REQUIRED,ServiceB.methodB的事务级别为PROPAGATION_REQUIRES_NEW,那么当执行到ServiceB.methodB的时候,ServiceA.methodA所在的事务就会挂起,ServiceB.methodB会起一个新的事务,等待ServiceB.methodB的事务完成以后,它才继续执行。它与PROPAGATION_REQUIRED 的事务区别在于事务的回滚程度了。因为ServiceB.methodB是新起一个事务,那么就是存在两个不同的事务。如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB是不会回滚的。如果ServiceB.methodB失败回滚,它抛出的异常被ServiceA.methodA捕获,ServiceA.methodA事务仍然可以提交。
    -- PROPAGATION_NOT_SUPPORTED
       -- 当前不支持事务。比如ServiceA.methodA的事务级别是PROPAGATION_REQUIRED ,而ServiceB.methodB的事务级别是PROPAGATION_NOT_SUPPORTED,
       那么当执行到ServiceB.methodB时,ServiceA.methodA的事务挂起,而它以非事务的状态运行完,再继续ServiceA.methodA的事务。
    -- PROPAGATION_NEVER
       -- 不能在事务中运行。假设ServiceA.methodA的事务级别是PROPAGATION_REQUIRED, 而ServiceB.methodB的事务级别是PROPAGATION_NEVER,那么ServiceB.methodB就要抛出异常了。
    -- PROPAGATION_NESTED
       -- 理解Nested的关键是savepoint。它与PROPAGATION_REQUIRES_NEW的区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与它的父事务相互独立,而Nested的事务和它的父事务是相依的,它的提交是要等和它的父事务一块提交的。也就是说,如果父事务最后回滚,它也要回滚的。而Nested事务的好处是它有一个savepoint。也就是说ServiceB.methodB失败回滚,那么ServiceA.methodA也会回滚到savepoint点上,ServiceA.methodA可以选择另外一个分支,比如ServiceC.methodC,继续执行,来尝试完成自己的事务。但是这个事务并没有在EJB标准中定义。

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [事务隔离 传播] 推荐:

事务隔离和传播

- - 数据库 - ITeye博客
- Spring中事务的Propagation(传播性)的取值.        -- 加入当前已有事务;只有当前没有事务才起一个新的事务.        比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于ServiceA.methodA的时候,ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.methodB看到自己已经运行在ServiceA.methodA的事务内部,就不再起新的事务.

MySQL数据库事务隔离级别(Transaction Isolation Level)

- - RSS - IT博客云
修改事务隔离级别的方法:. 1.全局修改,修改 mysql.ini配置文件,在最后加上. 1 #可选参数有: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 这里全局默认是 REPEATABLE-READ,其实MySQL本来默认也是这个级别.

MySQL 数据库事务隔离性的实现

- - 掘金 后端
​​​​摘要: 事实上在数据库引擎的实现中并不能实现完全的事务隔离,比如串行化. 本文分享自华为云社区 《【数据库事务与锁机制】- 事务隔离的实现》,原文作者:技术火炬手. 事实上在数据库引擎的实现中并不能实现完全的事务隔离,比如串行化. 这种事务隔离方式虽然是比较理想的隔离措施,但是会对并发性能产生比较大的影响,所以在 MySQL 中事务的默认隔离级别是 REPEATABLE READS(可重复读),下面我们展开讨论一下 MySQL 对数据库隔离性的实现.

流言传播的是人情

- 水御龙神 - It Talks--上海魏武挥的博客
流言,亦可称之为“谣言”,倒不是说一定是假话,而是指:未经证实的消息. 昨儿收到若干条短信,内容都是一样的,大意就是日本核泄漏,将影响到中国,宜穿白色长衣,最好戴口罩,每天洗澡,多摄入含碘食物,云云. 都是朋友以及家人发来的,我深表谢意之余,也开始琢磨这个事. 照道理,真有核辐射,带口罩是不解决任何问题的.

病毒式传播的八种方式

- - 互联网的那点事...
想想Facebook、LinkedIn、Youtube、Dropbox和Skype都有什么共同点. 除了都非常成功之外,或许它们共同的特点就是能在快速增长过程中运用很有效的病毒式营销了. 至于这些公司是怎么做到的,来看看下面这八种方式吧. 1、天生的传播特性(Inherent virality). 这是最原始的一种病毒式传播,可以称得上是口碑效应.

九大微博传播分析工具

- - 互联网分析
一、知微  http://www.weiboreach.com/. 出品方微博:@社会网络与社会挖掘. 功能:免费版提供2000以下转发传播分析;提供可视化的微. 博传播路径图,传播关键人物分析,转发粉丝属性分析、传播层. 级比例分析等;可视化界面很精美哦. 二、独到  http://www.doodod.com.

谣言传播的8½定律(下)

- - 果壳网 guokr.com
在 谣言传播的8½定律(上)中,我们了解了谣言传播的前4个定律,现在再来看看后4½个定律吧. 每年夏季,总会流传一些海鲜或者啤酒的谣言. 像这个,“吃一口鱿鱼相当于吃40口肥肉. ”好吧,虽然海鲜胆固醇含量的确很高,但并没有“肥肉的40倍”,更详细点,不管采用哪种计算方式,基本上二者的胆固醇差异不会超过10倍,而且鱿鱼是高蛋白而低脂肪的一种食物而肥肉含有大量饱和脂肪,相比之下鱿鱼的营养远超过40口肥肉.

谣言传播的8½定律(上)

- - 果壳网 guokr.com
(文/Taylor Clark)如果我也不好骗,你也不好骗,为何有些天方夜谭就经久不衰呢. 不管多疑还是轻信,我们总会在某一时刻中了谣言的招. 在我们注意到之前,谣言会悄悄绕过精神防线. 但是谣言若具备一些特征,就特别可能卸掉我们的防备,让人信以为真,竭力传播. 本质上来说,人们传播一个未经证实的消息是在试图理解这个世界.

用无生育能力的蚊子阻止疟疾传播

- 林十四 - Solidot
科学家创造出无精子的蚊子以帮助阻止疟疾传播. 疟疾每年杀死了一百万人,而蚊子是主要的传播媒介. 这项研究提出,把无精子的雄性冈比亚按蚊(Anopheles gambiae)释放到环境中可能有助于阻止疟疾传播. 伦敦帝国学院的Janis Thailayil和同事通过关闭制造精子所需的一种基因而让雄蚊绝育.

海底捞体:病毒式传播的边界在哪里

- iaotin - 互联网的那点事
在发微博的你,如果还在用淘宝体、咆哮体、凡客体遣词造句就OUT了,最近有一种“海底捞体”(海底捞,火锅连锁企业)正在微博上盛行,成为网络营销的新案例. “昨天在海底捞,无意中跟朋友抱怨京东抢的奈良美智大画册怎么还没到货,结果服务员结账的时候问了我京东会员账户,今天一早三本大画册都送来了. ”网名为“猫叔Ryan”发的这条微博被转了35000多次.