spring事物

1、事物属性

事物属性主要是通过TransactionDefinition接口实现定义,主要有事物的隔离级别,事物的传播性,事物的超时时间,事物是否只读

1)事物隔离级别:用来解决并发事物出现的问题,其使用TransactionDefinition中的静态变量来指定:

         ISOLATION_DEFAULT:默认隔离级别,即使用底层数据库默认的隔离级别;

         ISOLATION_READ_UNCOMMITTED:未提交读;

         ISOLATION_READ_COMMITTED:提交读,一般情况下我们使用这个;

         ISOLATION_REPEATABLE_READ:可重复读;

         ISOLATION_SERIALIZABLE:序列化。

可以使用DefaultTransactionDefinition类中的setIsolationLevel方法来设计事物的隔离级别

2)事物传播行为:spring管理的事物是逻辑事物,物理事物与逻辑事物两者之间的区别就在于事物的传播行为,事物的传播行为指用于多个事物之间调用,事物是如何在这些方法间传播的,spring一共支持7中传播行为:

userDao.save(user);  

 user.getAddress().setUserId(user.getId());  

 addressService.save(user.getAddress());

Required:必须有逻辑事物,否则创建一个新事物PROPAGATION_REQUIRED指定,表示当前如果有事物,则加入该事物,否则创建一个新事物


    一.当userService调用save()方法时,此时spring用的required传播行为并且spring事物管理器中没有开启逻辑事物,所以spring管理器会开启一个逻辑事物;

    二.当addressService调用save()方法时发现同样用的required传播行为,因此使用已经存在的逻辑事物

    三、在返回到addressService对象的save方法,当事务模板类执行完毕,此时提交并关闭事务。

       因此userService对象的save方法和addressService的save方法属于同一个物理事务,如果发生回滚,则两者都回滚

RequiresNew:创建新的逻辑事务,使用PROPAGATION_REQUIRES_NEW指定,表示每次都创建新的逻辑事务(物理事务也是不同的),如下图:


该传播行为执行流程(正确提交情况):

一、当执行userService对象的save方法时,由于传播行为是RequiresNew,因此创建一个新的逻辑事务(物理事务也是不同的);

二、当执行到addressService对象的save方法时,由于传播行为是RequiresNew,因此首先暂停上一个逻辑事务并创建一个新的逻辑事务(物理事务也是不同的);

三、addressService对象的save方法执行完毕后,提交逻辑事务(并提交物理事务)并重新恢复上一个逻辑事务,继续执行userService对象的save方法内的操作;

四、最后userService对象的save方法执行完毕,提交逻辑事务(并提交物理事务);

五、userService对象的save方法和addressService对象的save方法不属于同一个逻辑事务且也不属于同一个物理事务。

Supports:支持当前事物,使用PROPAGATION_SUPPORTS指定,如果当前存在逻辑事物,则加入当前逻辑事物,如果没有,则以非事物方式提交


NotSupported:不支持事物,如果当前存在事物则暂停该事物,使用PROPAGATION_NOT_SUPPORTED指定,以非事物方式执行,如果当前存在逻辑事务,就把当前事务暂停,以非事务方式执行。


Mandatory:必须有事物,否则抛出异常,使用PROPAGATION_MANDATORY指定,使用当前事物执行,如果当前没有事物,则抛出异常。


Never:不支持事物,如果当前有事物则抛出异常,使用PROPAGATION_NEVER指定,即以非事物方式执行,如果当前存在事物,则抛出异常。

Nested:嵌套事物支持,使用PROPAGATION_NESTED指定,如果当前存在事物,则嵌套在事物内执行,如果当前没有事物,则创建一个新事物执行,嵌套事物是以数据库保存点来实现,即嵌套事物回滚不会影响外部事物,但外部事物回滚会影响嵌套事物。

Nested和RequiresNew的区别:

1.RequiredNew每次都是创建一个新的独立的物理事物,而Nested只有一个物理事物

2.Nested嵌套事物发生回滚不会影响外部事物,外部事物发生回滚会影响嵌套事物,而RequiredNew每次创建的都是新事物,所以并没有关联。

3.Nested使用JDBC 3的保存点实现,即如果使用低版本驱动将导致不支持嵌套事务。

使用嵌套事务,必须确保具体事务管理器实现的nestedTransactionAllowed属性为true,否则不支持嵌套事务,如DataSourceTransactionManager默认支持,而HibernateTransactionManager默认不支持,需要我们来开启。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容

  • 背景 Spring 默认的事务的传播为PROPAGATION_REQUIRED即如果当前没有事务,就新建一个事务。...
    shawnxjf阅读 1,149评论 0 5
  • 看到关于spring事物比较好的两篇文章,转载过来。 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作...
    Aldeo阅读 944评论 0 8
  • 事物特性 ⑴原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操...
    HJJ_3c00阅读 271评论 0 0
  • 很多人喜欢这篇文章,特此同步过来 由浅入深谈论spring事务 前言 这篇其实也要归纳到《常识》系列中,但这重点又...
    码农戏码阅读 4,741评论 2 59
  • 一、spring事物 Spring传播事务行为类型 二:REQUIRED和REQUIRES_NEW情况说明 1.方...
    吴世浩阅读 893评论 0 2