Chinaunix首页 | 论坛 | 博客
  • 博客访问: 503835
  • 博文数量: 99
  • 博客积分: 2030
  • 博客等级: 大尉
  • 技术积分: 783
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-12 09:11
文章分类

全部博文(99)

文章存档

2023年(2)

2022年(1)

2020年(1)

2019年(1)

2018年(4)

2017年(16)

2016年(60)

2015年(1)

2013年(3)

2006年(10)

我的朋友

分类: Java

2017-12-21 15:47:49

本人保留别人链接使用,勿喷。

Spring的事务 之 9.1 数据库事务概述


Spring的事务 之 9.2 事务管理器


Spring的事务 之 9.3 编程式事务


Spring的事务 之 9.4 声明式事务









Required:必须有逻辑事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定,表示如果当前存在一个逻辑事务,则加入该逻辑事务,否则将新建一个逻辑事务,如图9-2和9-3所示;

 

图9-2 Required传播行为

 






Supports:支持当前事务,使用PROPAGATION_SUPPORTS指定,指如果当前存在逻辑事务,就加入到该逻辑事务,如果当前没有逻辑事务,就以非事务方式执行,如图9-6和9-7所示:

 

图9-6 Required+Supports传播行为

 

       图9-7 Supports+Supports传播行为

 

 

 

 

NotSupported:不支持事务,如果当前存在事务则暂停该事务,使用PROPAGATION_NOT_SUPPORTED指定,即以非事务方式执行,如果当前存在逻辑事务,就把当前事务暂停,以非事务方式执行,如图9-8和9-9所示:

 

       图9-8 Required+NotSupported传播行为

 

       图9-9 Supports+NotSupported传播行为

 

 

 

 

Mandatory:必须有事务,否则抛出异常,使用PROPAGATION_MANDATORY指定,使用当前事务执行,如果当前没有事务,则抛出异常(IllegalTransactionStateException),如图9-10和9-11所示:

 

 

 

       图9-10 Required+Mandatory传播行为

 

       图9-11 Supports+Mandatory传播行为

 

 

 

 

Never:不支持事务,如果当前存在是事务则抛出异常,使用PROPAGATION_NEVER指定,即以非事务方式执行,如果当前存在事务,则抛出异常(IllegalTransactionStateException),如图9-12和9-13所示:

 

       图9-12 Required+Never传播行为

 

       图9-13 Supports+Never传播行为

 

 

 

 

 

Nested:嵌套事务支持,使用PROPAGATION_NESTED指定,如果当前存在事务,则在嵌套事务内执行,如果当前不存在事务,则创建一个新的事务,嵌套事务使用数据库中的保存点来实现,即嵌套事务回滚不影响外部事务,但外部事务回滚将导致嵌套事务回滚,如图9-14和9-15所示:

 

       图9-14 Required+Nested传播行为

 

图9-15 Nested+Nested传播行为








阅读(767) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~