Spring 事务传播行为实验
一、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 事务传播行为实验的更多相关文章
- spring事务传播特性实验(2):PROPAGATION_REQUIRED实验结果与分析
本文延续上一文章(spring事务传播特性实验(1):数据准备),在已经准备好环境的情况下,做如下的实验,以验证spring传播特性,加深对spring传播特性的理解. 本次主要验证PROPAGATI ...
- Spring事务传播属性介绍(二).mandatory、not_supported、never、supports
Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Nested传播属性分析传送 ...
- Spring事务传播属性介绍(一).required 和 reuqires_new
Mandatory.Never.Not_Support传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10260030.html Nested传播 ...
- 通过实际案例摸清楚Spring事务传播的行为
@ 目录 事务传播 案例准备 案例解析 1.无事务 2. Propagation.REQUIRED 3. Propagation.SUPPORTS 4. Propagation.MANDATORY 5 ...
- spring事务传播机制实例讲解
http://kingj.iteye.com/blog/1680350 spring事务传播机制实例讲解 博客分类: spring java历险 天温习spring的事务处理机制,总结 ...
- Spring事务传播机制
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...
- Spring事务传播机制和数据库隔离级别
Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...
- spring 事务传播机制
spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...
随机推荐
- XE7 里面添加自定义View
经过xe4,xe5,xe6 这么几个版本的磨合,易博龙终于在今年9月推出了统一的多平台开发版本-XE7. 经过最近几天的测试,非常不错.如果各位同学在做移动开发,强烈建议使用XE7. 前面几个版本可以 ...
- ORACLE实用函数之一 ratio_to_report的简单使用
应用场景: 查询学生成绩级别(ABCDE)个人数和所占百分比(案列简单,勿喷). 表结构: create or replace table stu_grade( id varchar2(36), le ...
- 2018.09.16 loj#10242. 取石子游戏 2(博弈论)
传送门 同样有一个显然的结论. 如果a1a_1a1 xorxorxor a2a_2a2 xorxorxor a3a_3a3 xor...xor...xor... xorxorxor ana_na ...
- 2018.08.28 洛谷P4556 [Vani有约会]雨天的尾巴(树上差分+线段树合并)
传送门 要求维护每个点上出现次数最多的颜色. 对于每次修改,我们用树上差分的思想,然后线段树合并统计答案就行了. 注意颜色很大需要离散化. 代码: #include<bits/stdc++.h& ...
- hdu-1877(大数+进制转换)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1877 思路:注意考虑0,0的情况. #include<iostream> #include ...
- VS2013支持多字节的方法
参考链接: https://jingyan.baidu.com/article/6181c3e06ab30f152ff1534d.html
- android图形系统概述
简介 本文讲解的内容是Android4.1以后的系统机制,将从整体上分析Android图形显示系统的结构,不深入分析每一层内部的代码实现,更多的是使用流程图和结构图来让大家理解Android是如何绘制 ...
- python 的几种启动方式
python 的几种启动方式 (1)利用Win的操作系统的:命令行工具 cmd.exe Win + R 调出运行对话框,然后输入cmd,即可调出“命令提示符对话框” 或者 在菜单中店家附件中的命令提 ...
- java web基础之mvc模式设计(一)--使用httpservlet实现mvc分层设计,DAO层使用的是dbutils实现与数据库的链接
一:1.最终的实现效果图: 2.案例的目录结构: 3.案例中使用到的jar包: 二:案例的链接数据库的层次结构关系:数据库是:mysql ,数据库名字:dsm,表格名字:customers 数据库表格 ...
- dubbo在eclipse中无法读取到dubbo.xsd
报错信息如下: Multiple annotations found at this line:– cvc-complex-type.2.4.c: The matching wildcard is s ...