事物的传播属性:
当事务方法被另一个事务方法调用时, 必须指定事务应该如何传播. 例如: 方法可能继续在现有事务中运行(REQUIRED), 也可能开启一个新事务, 并在自己的事务中运行(Required_NEW).
事务的传播行为可以由传播属性(propagation)指定. Spring 定义了 7 种类传播行为.

这里主要理解一下REQUIRED和REQUIRED_NEW

用例子来说明:
比如一个客户去买两本书,但是账户的余额只能买一本书,那这时应该怎么处理呢?处理方法就是:1要么买一本书,2要么两本一起不买
代码说明:
客户买多本书的接口:

package com.jeremy.springTransaction;
import java.util.List;
public interface cashier {
void checkOut(String userName,List<String> isbns);
}

实现类:

package com.jeremy.springTransaction;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class cashierImpl implements cashier {
@Autowired
BookShopServiceImpl bookShopServiceImpl; @Transactional
@Override
public void checkOut(String userName, List<String> isbns) {
// TODO Auto-generated method stub
for (String isbn:isbns) {
bookShopServiceImpl.purchase(userName, isbn);
}
}
}

purchase()方法代码:

@Autowired
private BookShopDao bookShopDao; @Transactional
@Override
public void purchase(String username, String isbn) { //1. 获取书的单价
int price = bookShopDao.findBookPriceByIsbn(isbn); //2. 更新数的库存
bookShopDao.updateBookStock(isbn); //3. 更新用户余额
bookShopDao.updateUserAccount(username, price);
}

完整代码这里下载:

这里只是举例子
当客户需要买两本书时,就需要调用checkout()方法,并启动事务(tx1),但是checkout()方法又需要调用purchase()方法,而这个方法也有事务(tx2),这时tx2是要重新开启一个事务还是放在tx1事务中运行

当放在事务tx1运行时:也就是事务的传播属性(propagation=REQUIRED)时,运行流程如下:
REQUIRED:在现有的事务内运行,一起提交

所以这时客户一本书也买不了,因为事务tx2、tx3都和事务tx1一起提交

当重新开启一个事务时:也就是事务的传播属性(propagation=REQUIRED_NEW)时,运行流程如下:

EQUIRES_NEW. 它表示该方法必须启动一个新事务, 并在自己的事务内运行. 如果有事务在运行, 就应该先挂起它.

所以这时客户能买一本书,因为事务tx2已经提交了,

Spring的事物传播行为的更多相关文章

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

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

  2. Spring 事物传播特性

    Spring 事物传播特性 这是Spring官方的定义 一共有7种 摘自源码省略了一部分 public interface TransactionDefinition { int PROPAGATIO ...

  3. mysql数据库隔离级别及其原理、Spring的7种事物传播行为

    一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...

  4. Spring事物传播行为

    Spring事物传播行为 Spring中事务的定义: Propagation(key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.)有以下选项可供使用: PROPAGATI ...

  5. spring事物传播机制与隔离级别

    转载自:http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html7个传播行为,4个隔离级别, Spring事务的传播行为和隔 ...

  6. 关于spring 事物传播性的研究

    spring的一大特色就是数据库事务管理方便,我们在代码中编写代码时,看不到事务的使用,关键是spring 使用了AOP进行事务拦截.   这篇文章主要介绍spring的事务传播性.   1.为什么要 ...

  7. Spring事物隔离级别及事物传播行为@Transactional实现

    阅读本篇文章前,请先阅读如下文章: 四种事物隔离级别详解 先看下@Transactional可以配制那些参数及以其所代表的意义. isolation 枚举org.springframework.tra ...

  8. 解惑spring嵌套事物

    工作中一直对spring中的事物管理都是最简单的配置 但是spring中的事物传播性配置 还有很多种,有时候经常疑惑service调用service的问题,今天的论坛上看到一篇写的非常详细的文字.记录 ...

  9. [原创]java WEB学习笔记109:Spring学习---spring中事物管理

    博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...

随机推荐

  1. quick-cocos2dx-2.2.4环境搭建

    1.Quick-Coco2d-x介绍 Quick-Coco2d-x是Cocos2d-x在Lua上的增强和扩展版本,廖宇雷廖大觉得官方Cocos2d-x的Lua版本不是太好用,于是便在官方Lua版本的基 ...

  2. 第7章 Iptables与Firewalld防火墙。

    第7章 Iptables与Firewalld防火墙.     Chapter7_听较强节奏的音乐能够让您更长时间的投入在学习中. <Linux就该这么学> 00:00/00:00     ...

  3. Qt5中的QtGui

    我在学习Qt查看Qt Creater提供的例子时,遇到了一个小问题.就是明明在代码中包含了QtGui,然而编译的时候还是提示找不到QLabel的定义,以及其他一些类的定义,但是这是官方提供的文档的啊, ...

  4. Windows Phone实用教程:利用Blend为程序添加设计时数据

    [前言] Blend自诞生那一天起就伴随这开发者如此的评价: 有VS还用Blend干啥,直接码代码就好了. Blend会生成一堆垃圾无用代码,很不爽. 对于这类我只会在心里评价,当你并不真正了解一样事 ...

  5. jQuery+html5实现的3D动态切换焦点轮播幻灯片

    今天爱编程给网友们分享一款基于jQuery+html5实现的3D动态切换焦点轮播幻灯片,支持左右箭头和圆点按钮播放控制,支持多种不同的3D动态切换特效,自适应全屏显示,兼容360.FireFox.Ch ...

  6. 跟着百度学习php之ThinkPHP的运行流程-2

    Thinkphp为了提高编译的效率,第一次运行的时候thinkphp会把文件全部编译到temp目录下的~runtime.php文件,在第二次运行的时候会直接读取这个文件.所以我们在线下自己写代码测试的 ...

  7. jasperreports+Ireport开发搭建

    1.报表依赖 <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasp ...

  8. 一条经典SQL语句优化实例

    1.概述 如下SQL语句发生严重消耗资源的问题,使得OS's load average会在30以上,一条语句需要执行上百秒. /*PIXPatient 184176条DomainPatient 184 ...

  9. ASP.NET 5 将于2016年一季度公布

    简单介绍:微软ASP.NET团队在GitHub宣布ASP.NET 5的公布时间表和发展蓝图. 该团队宣布在2015年还将公布三个Beta版.一个ASP.NET 5的抢先版(RC 1).到2016年一季 ...

  10. EF报LINQ to Entities 不识别方法“Web_JZRepository.Models.copy_materials_details get_Item(Int32) ”,因此该方法无法转换为存储表达式。

    说明用了如 List<T> list=new List<T>(); je.copy_materials_details.SingleOrDefault(x => x.ID ...