文档章节

WEB 开发事务管理

北漂的我
 北漂的我
发布于 01/18 12:06
字数 1083
阅读 8
收藏 0

事务处理

事务的4个基本特征

1.Atomic(原子性),事务中包含的操作被看做是一个整体的业务单元,这个业务单元中的操作要么全部成功,要么全部失败,不会出现部分成功,部分失败的场景。

2.Consistency(一致性),事务在完成时,必须使所有的数据都保持一致的状态,在数据库中所有的修改都基于事务,保证了数据的完成性。

3.Isocation(隔离性),多个应用程序线程同时访问同一个数据,在不同的事务中被访问,这样就会产生丢失更新。为了在不同程度上压制丢失更新的产生,数据库定义了隔离级别的概念。因为互联网应用是高并发场景,所以隔离性是要重点掌握的内容。

4.Durability(持久性),事务结束后,所有的数据都固化到一个地方,比如保存到磁盘或数据库中,即使断电重启后也能再次提供给程序访问。

数据库的隔离级别

1.未提交读(read uncommitted),允许一个事务读取另一个事务没有提交的数据,未提交读是一种危险的隔离级别,所以一般在实际的开发中用的很少,优点是并发能力高,适合那些对数据的一致性没有要求而追求高并发的场景。最大的坏处就是会出现脏读。为了克服脏读,提出了读写提交的隔离级别。

2.读写提交(read committed),是指一个事务只能读取另外一个事务已经提交的数据,不能读取未提交的数据,从而克服脏读的问题。但是读写提交的坏处就是出现不可重复读,为了克服不可重复读,提出了可重复读的隔离级别。

3.可重复读(repeatable read),为了克服在读写提交的时候出现的不可重复读问题,因为在读写提交的时候,可能出现一些值的变化,影响当前事务的执行。但是假设商品正在交易,后台有人在进行查询分析和打印的业务,这时就会出现一个新的问题就是幻读

4.串行化(Serializable),是数据库最高的隔离级别,它会要求所有的 Sql 都按照顺序执行,这样就可以克服脏读、不可重复读、幻读的问题,能够完全保证数据的一致性,但是性能是最差的。

事务的传播行为(最常用的:REQUIRED、REQUIRES_NEW、NESTED)

1.REQUIRED默认的传播行为,如果当前存在事务,就沿用当前的事务,如果当前不存在事务,就创建一个事务运行业务)

2.SUPPORTS(支持事务,如果当前存在事务,就沿用当前事务,如果当前不存在事务,就继续采用无事务方式运行)

3.MANDATORY(必须使用事务,如果当前没有事务,就抛出异常,如果当前存在事务,就沿用当前事务)

4.REQUIRES_NEW(无论当前是否存在事务,都会创建一个新事务运行业务,新的事务就拥有独立的锁和隔离级别等特性,与当前事务相互独立)

5.NOT_SUPPORTED(不支持事务,当前存在事务时,将挂起事务,运行方法)

6.NEVER(不支持事务,如果当前存在事务,就抛出异常,否则继续使用无事务机制运行)

7.NESTED嵌套事务,如果被父方法调用,子方法发生异常,在父方法中 try catch 子方法,那么只回滚子方法,不回滚父方法已经执行的,后面的语句也可以继续执行)

同一个 Service 类中的方法的自调用,会引起子方法的 @Transactional 失效!!!

© 著作权归作者所有

共有 人打赏支持
北漂的我

北漂的我

粉丝 11
博文 81
码字总数 17632
作品 0
昌平
程序员
私信 提问
【step by step构建轻量级web框架】-何为轻量级web框架

本系列博文,将会一步一步介绍如何构建一个轻量级的web框架jbeer git地址:http://git.oschina.net/bieber/jbeer 在SSH/SSI充实着我们每个项目的开发过程中,我们所做的事情就是将他们一次组...

Bieber
2014/06/14
0
4
Warp Framework

Warp framework 是基于Google Guice的轻量级Web开发框架 Warp框架充分利用了JDK5.0的Annotation和泛型机制,并且基于Google Guice这个IoC框架,提供了full-stack的Web开发设施,他主要包含了...

匿名
2008/09/23
3.6K
0
基于RIA的Web应用开发框架--iBeshmet

ibeshmet是基于J2EE技术的MVC开发框架,用于实现Web应用的快速开发。该框架提供了完整的Web应用解决方案,UI使用当前流行的ExtJS2.0,表现层框架为Struts2 , 事务管理由Spring2.0处理,持久...

匿名
2010/03/02
4.2K
2
Spring 事务管理高级应用难点剖析: 第 1 部分

Spring 最成功,最吸引人的地方莫过于轻量级的声明式事务管理,仅此一点,它就宣告了重量级 EJB 容器的覆灭。Spring 声明式事务管理将开发者从繁复的事务管理代码中解脱出来,专注于业务逻辑...

红薯
2010/03/28
1K
2
【第一章】 Spring概述 —— 跟我学Spring3

1.1 Spring概括 1.1.1 Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互...

C-Kellen
2016/02/02
33
0

没有更多内容

加载失败,请刷新页面

加载更多

vuex

一直有个误区 vuex既然页面刷新会丢失 那还有什么意义 。 重新翻看了下文档才恍然大误,vuex主要解决的是不同组件间的通信。 跨页面数据共享本质上还是用sessionStorage/localStorage...

东东笔记
30分钟前
2
0
网站漏洞检测之WordPress 5.0.0 修复方案

2019年正月刚开始,WordPress最新版本存在远程代码注入获取SHELL漏洞,该网站漏洞影响的版本是wordpress5.0.0,漏洞的产生是因为image模块导致的,因为代码里可以进行获取目录权限,以及文件...

网站安全
58分钟前
1
0
MySql 优化 group by 语句

默认情况下,Mysql 对所有 group by 的字段进行排序,如果查询包括 group by ,用户想要避免排序结果的消耗。可以指定 order by null 禁止排序。 mysql> EXPLAIN select * from sys_log gro...

嘴角轻扬30
今天
11
0
Linux分区&格式化&文件系统&LVM&扩容

硬件 磁盘由 盘片组、主轴马达、机械臂、磁头、驱动芯片和电路、接口等构成 2. 磁盘的分割 每个盘片很多同心圆分割为磁道 Trace 一组盘片的同径磁道叫做一个柱面 Cylinder 每个磁道又被分为很...

可数局部基
今天
5
0
刷leetcode第705题- 设计哈希集合

这个我可能做的不是很符合题意,虽然AC了,但是没有去用到hash函数之类的方式。同样使用了位运算来搞定这一切,简单易懂。上代码如下: typedef char MyHashSet;/** Initialize your data ...

锟斤拷烫烫烫
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部