spring事务代码实践
事务一般是指数据库事务,是指作为一个程序执行单元执行的一系列操作,要么完全执行,要么完全不执行。事务就是判断以结果为导向的标准。
一.spring的特性(ACID)
(1).原子性(atomicity)
原子性就是一个不可分割的工作单元。简单的说,就是指事务包含的所有操作要么全部成功,要么全部失败回滚。因此事务的操作如果成功就必须要完全应用到数据库,如果失败则不能对数据库有任何影响。
(2).一致性(consistency)
一致性就是事务必须是使一个一致性状态变成另一个状态,也就是说一个书屋执行之前和执行之后都必须处于一致性状态。那转账来说,假设用户A和用户B两者的钱加起来一共是5000.那么不管A和B之间如何转账,转多少次,事务结束后两者的钱加起来还是5000。
(3).隔离性(isolation)
隔离性就是一个事务的执行不能被另一个事务干扰。当多个用户并发访问数据库操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,并发事务之间要相互隔离。
(4).持久性(durability)
持久性是指一个事务一旦被提交了,那么对数据库数据的改变就是永久的。即使是在数据系统遇到故障的情况下也不会丢失提交事务的操作。
二.spring的隔离级别
* 脏读:一个事务读到了另一个事务未提交的数据
* 不可重复读:一个事务读到另一个事务已经提交(update)的数据导致多次查询结果不一致
* 虚幻读:一个事务读到了另一个事务已经提交(insert)的数据导致多次查询结果不一致。
对于sqlserver和oracle的默认隔离级别是RC,mysql的默认隔离级别是RR。
三.spring的传播特性(事务有7中传播机制 )
对于spring的代码我有写过一个测试的小demo,在demo里面有记录如何添加的事务,同时也打印了日志记录最后结果,可以任意扩展。
由于博客园上传代码比较麻烦,我就上传到CSDN上的,想测试的可以去下载。
网址:https://download.csdn.net/download/zj520_/12064006;

四.spring的注意事项
1. 出现Exception是无法回滚的,只有抛出RuntimeException和Error异常时才能回滚。 2. 在事务代码中捕获了异常,是无法进行回滚的。
3. 如果是使用的spring+mvc模式。并且spring和mvc都扫描了service层(事务处理层),事务不生效。因为spring会有限加载mvc的配置文件,而事务的配置基本上都是在spring中,因为spring的子容器先于父容器启动,造成在controller中注入service时还没有加载事务。
4. mysql的myISAM引擎,是不支持事务的,需要设置为innoDB模式。
5. 事务的开启必须放到listener里面加载,如果放到dispatchServlet的配置里面,事务不生效。
6. 如果在接口中使用@Transactional,只有JDK动态代理才能生效,CGLIB动态代理是不生效的,因为注解是不能继承的。
五.如果让Exception可以进行回滚呢?
方法1:@Transactional注解指定rollbackFor=Exception.class
方法2:让throw的自定义Exception继承RuntimeException
方法3:使用自定义注解,处理回滚Exception的问题:
@Transactional(rollbackFor=Exception.class)
public @interface DolTransactional {
}
spring事务代码实践的更多相关文章
- Spring 事务传播实践分析
事务管理是应用系统开发中必不可少的一部分.事物将若干的数据库操作作为一个整体控制,一起成功或一起失败.事物有以下特性 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. ...
- Spring事务源码阅读笔记
1. 背景 本文主要介绍Spring声明式事务的实现原理及源码.对一些工作中的案例与事务源码中的参数进行总结. 2. 基本概念 2.1 基本名词解释 名词 概念 PlatformTransaction ...
- spring事务详解(一)初探事务
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 引子 很多 ...
- 一文带你认识Spring事务
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y Spring事务管理我相信大家都用得很多,但可能仅仅 ...
- Spring事务传播机制与隔离级别(转)
Spring事务传播机制与隔离级别 博客分类: Spring 转自:http://blog.csdn.net/edward0830ly/article/details/7569954 (写的不错) ...
- Spring事务管理入门与进阶
事务管理 一个数据库事务是一个单一的工作单元操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,事务管理可以确保数据完整性和一致性.事务具有以下四个关键特性分别是 ACI ...
- Spring事务传播属性有那么难理解吗?
学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过几天就会忘记,接下来我们一起实践来学习Spring事务的传播属性. 传播属性 传播属性定义的是当一个事务方法碰到另一个事 ...
- Spring 事务 属性 详细
学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过几天就会忘记,接下来我们一起实践来学习Spring事务的传播属性. 传播属性 传播属性定义的是当一个事务方法碰到另一个事 ...
- 理解 spring 事务传播行为与数据隔离级别
事务,是为了保障逻辑处理的原子性.一致性.隔离性.永久性. 通过事务控制,可以避免因为逻辑处理失败而导致产生脏数据等等一系列的问题. 事务有两个重要特性: 事务的传播行为 数据隔离级别 1.事务传播行 ...
随机推荐
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 字符串函数
这些函数在字符数组类(numpy.char)中定义. add() 对两个数组的逐个字符串元素进行连接 multiply() 返回按元素多重连接后的字符串 center() 居中字符串 capitali ...
- thinkphp5.1注解插件
前言: thinkphp5.1中用注解的方式实现: v0.1.0版本 数据验证器 请求过滤.格式化 属性对象注入 dev-master版本 额外支持 自动事务 数据缓存 如果您觉得好用,点个star哈 ...
- 3_08_MSSQL课程_Ado.Net_子查询
子查询 1.把一个查询结果作为一个表来使用,就是子查询. 2.把一个查询结果作为一个 表达式进行使用就是子查询. (分页Sql)
- Update(stage3):第1节 redis组件:8、主从复制架构;9、Sentinel架构
8.redis的主从复制架构 在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(ma ...
- Mac 系统上有趣的插件
1.微信小助手:https://github.com/TKkk-iOSer/WeChatPlugin-MacOS 作用:开启消息撤回拦截,设置自动回复,远程登录Mac,微信多开,免认证登录.... 2 ...
- 一个高级PHP工程师所应该具备的(转自元如枫博客)
初次接触PHP,就为他的美所折服,于是一发不可收拾. 很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说一个PHP高级工程师所应该具备的,希望 ...
- FTP-Publisher Plugin
使用 FTP-Publisher Plugin 在 http://wiki.hudson-ci.org/display/HUDSON/FTP-Publisher+Plugin 有详细说明, 需要注意的 ...
- Day11 - Q - A Multiplication Game HDU - 1517
题目链接 本题很像bash博弈,但又有些许不同,因为这里是乘法,我们可以列出前几项可能 若n=2-9,那么first可以一次取完 若n=10-18,无论first怎么取,second都能一次取完 若n ...
- 刷题17. Letter Combinations of a Phone Number
一.题目说明 题目17. Letter Combinations of a Phone Number,题目给了下面一个图,输入一个字符串包括2-9,输出所有可能的字符组合. 如输入23所有可能的输出: ...
- Unity - 求反射向量 (2d)
求反射向量 https://www.cnblogs.com/graphics/archive/2013/02/21/2920627.html 上面是大佬的公式可以去看一下 借的大佬的图 1.求入射向量 ...