一、Propagation :

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

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED -- 而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。

二,代码清单

Mysql 表,

CREATE TABLE `account` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(20) NOT NULL,
   `money` double DEFAULT NULL,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

初始数据:

aaa 1000

bbb 1000

ccc 1000

public interface InnerService {
void InnerTransfer(String from, String to, double money);
}

@Service
public class InnerServiceImpl implements InnerService {

@Autowired
MyDao myDao;

@Transactional(propagation = Propagation.MANDATORY)
public void InnerTransfer(final String from, final String to, final double money) {
myDao.In(to, money);
// int a = 1 / 0;
myDao.Out(from, money);
}
}
 
public interface OuterService {
void OuterTransfer();
}
 
@Service
public class OuterServiceImpl implements OuterService {

@Autowired
InnerService innerService;

@Autowired
MyDao myDao;


public void OuterTransfer() {

myDao.In("ccc", 19);

innerService.InnerTransfer("aaa", "bbb", 100d);

int a = 1 / 0;
}
}
 
 
public interface MyDao {

void In(String user, double money);

void Out(String user, double money);
}
 
 
@Repository
public class MyDaoImpl extends JdbcDaoSupport implements MyDao {
@Autowired
private DataSource dataSource;

@PostConstruct
private void initialize() {
setDataSource(dataSource);
}

public void In(String user, double money) {
String sql = "update account set money = money + " + money + " where name='" + user + "'";

this.getJdbcTemplate().update(sql);
}

public void Out(String user, double money) {
String sql = "update account set money = money - ? where name=?";

this.getJdbcTemplate().update(sql, money, user);
}

}
 
 
配置文件略。
 
三、事务
 

 
 
 
 
 
 
 

OuterTransfer InnerTransfer 事务结果 aaa bbb ccc
  MANDATORY        
  NOT_SUPPORTED        
  SUPPORTS        
  REQUIRES_NEW        
  REQUIRED        
  NEVER        
  NESTED        
MANDATORY          
MANDATORY MANDATORY        
MANDATORY NOT_SUPPORTED        
MANDATORY SUPPORTS        
MANDATORY REQUIRES_NEW        
MANDATORY REQUIRED        
MANDATORY NEVER        
MANDATORY NESTED        
NOT_SUPPORTED          
NOT_SUPPORTED MANDATORY        
NOT_SUPPORTED NOT_SUPPORTED        
NOT_SUPPORTED SUPPORTS        
NOT_SUPPORTED REQUIRES_NEW        
NOT_SUPPORTED REQUIRED        
NOT_SUPPORTED NEVER        
NOT_SUPPORTED NESTED        
SUPPORTS          
SUPPORTS MANDATORY        
SUPPORTS NOT_SUPPORTED        
SUPPORTS SUPPORTS        
SUPPORTS REQUIRES_NEW        
SUPPORTS REQUIRED        
SUPPORTS NEVER        
SUPPORTS NESTED        
REQUIRES_NEW          
REQUIRES_NEW MANDATORY        
REQUIRES_NEW NOT_SUPPORTED        
REQUIRES_NEW SUPPORTS        
REQUIRES_NEW REQUIRES_NEW        
REQUIRES_NEW REQUIRED        
REQUIRES_NEW NEVER        
REQUIRES_NEW NESTED        
REQUIRED          
REQUIRED MANDATORY        
REQUIRED NOT_SUPPORTED        
REQUIRED SUPPORTS        
REQUIRED REQUIRES_NEW        
REQUIRED REQUIRED        
REQUIRED NEVER        
REQUIRED NESTED        
NEVER          
NEVER MANDATORY        
NEVER NOT_SUPPORTED        
NEVER SUPPORTS        
NEVER REQUIRES_NEW        
NEVER REQUIRED        
NEVER NEVER        
NEVER NESTED        
NESTED          
NESTED MANDATORY        
NESTED NOT_SUPPORTED        
NESTED SUPPORTS        
NESTED REQUIRES_NEW        
NESTED REQUIRED        
NESTED NEVER        
NESTED NESTED        
 

Spring 事务传播行为实验的更多相关文章

  1. spring事务传播特性实验(2):PROPAGATION_REQUIRED实验结果与分析

    本文延续上一文章(spring事务传播特性实验(1):数据准备),在已经准备好环境的情况下,做如下的实验,以验证spring传播特性,加深对spring传播特性的理解. 本次主要验证PROPAGATI ...

  2. Spring事务传播属性介绍(二).mandatory、not_supported、never、supports

    Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Nested传播属性分析传送 ...

  3. Spring事务传播属性介绍(一).required 和 reuqires_new

    Mandatory.Never.Not_Support传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10260030.html Nested传播 ...

  4. 通过实际案例摸清楚Spring事务传播的行为

    @ 目录 事务传播 案例准备 案例解析 1.无事务 2. Propagation.REQUIRED 3. Propagation.SUPPORTS 4. Propagation.MANDATORY 5 ...

  5. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  6. Spring事务传播机制

    Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...

  7. Spring事务传播特性的浅析——事务方法嵌套调用的迷茫

    Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...

  8. Spring事务传播机制和数据库隔离级别

    Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...

  9. spring 事务传播机制

    spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...

随机推荐

  1. [原创汉化] 价值990美元的顶级专业数据恢复软件O&O DiskRecovery 11(技术员版)汉化绿色版

    百度没搜索到11有汉化版的,有空就把它汉化了,大部分借鉴的是以前汉化版的词条.另外,顺便做了个二合一的单文件版给有需要的朋友. 运行环境: 可用于 Windows 2000/XP/2003/Vista ...

  2. 使用reactjs做一个CRUD功能

    第一步:引入reactjs所依赖的js文件,本案例使用的是bootstrap前端框架,所以引入了相应的js和css文件 第二步:body里面添加两个div 第三步:开始编写reactjs脚本 < ...

  3. 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...

  4. nginx 配置图片服务器 (window版本)

    配置nginx二级域名 ①找到配置文件 例如:%nginx_home%/conf/nginx.conf ②配置 #user nobody; worker_processes 1; #error_log ...

  5. centos yum command

    yum repolist all -- 列出所有仓库 yum list all -- 列出仓库中所有软件包 yum info package-name -- 查看软件包信息 yum install p ...

  6. (线段树) Count the Colors --ZOJ --1610

    链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82832#problem/F http://acm.zju.edu.cn/onli ...

  7. 洛谷P4248 [AHOI2013]差异(后缀自动机求lcp之和)

    题目见此 题解:首先所有后缀都在最后一个np节点,然后他们都是从1号点出发沿一些字符边到达这个点的,所以下文称1号点为根节点,我们思考一下什么时候会产生lcp,显然是当他们从根节点开始一直跳相同节点的 ...

  8. springmvc 孔浩 hibernate

    以上为项目文件 用到的jar包:http://pan.baidu.com/s/1kT1Rsqj 1. model-User 2. beans.xml-去哪些包中找annotation:查找相应的实体类 ...

  9. 团队项目(第二周)—GG队

    项目需求规格分析 队员信息 队员 学号 叶尚文(队长) 3116008802 蔡晓晴 3216008808 杜婷萱 3216008809 龙剑初 3116004647 于泽浩 3116004661 项 ...

  10. [svn] TortoisSVN的Blam功能

    团队开发中,我们必须要面对多个人对同一个文件进行修改的情况. 多人修改同一文件,往往就会发生很多的问题,或者随着文件中代码的数量不断增加.当我们必须要使用文件中的其他人写的代码,或者代码发生bug之后 ...