- 浏览: 958485 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
9.1 数据库事务概述
事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。
事务必需满足ACID(原子性、一致性、隔离性和持久性)特性,缺一不可:
- 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做;
- 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态,即数据完整性约束没有被破坏;如银行转帐,A转帐给B,必须保证A的钱一定转给B,一定不会出现A的钱转了但B没收到,否则数据库的数据就处于不一致(不正确)的状态。
- 隔离性(Isolation):并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性;
- 持久性(Durability):事务一旦执行成功,它对数据库的数据的改变必须是永久的,不会因比如遇到系统故障或断电造成数据不一致或丢失。
在实际项目开发中数据库操作一般都是并发执行的,即有多个事务并发执行,并发执行就可能遇到问题,目前常见的问题如下:
- 丢失更新:两个事务同时更新一行数据,最后一个事务的更新会覆盖掉第一个事务的更新,从而导致第一个事务更新的数据丢失,这是由于没有加锁造成的;
- 脏读:一个事务看到了另一个事务未提交的更新数据;
- 不可重复读:在同一事务中,多次读取同一数据却返回不同的结果;也就是有其他事务更改了这些数据;
- 幻读:一个事务在执行过程中读取到了另一个事务已提交的插入数据;即在第一个事务开始时读取到一批数据,但此后另一个事务又插入了新数据并提交,此时第一个事务又读取这批数据但发现多了一条,即好像发生幻觉一样。
为了解决这些并发问题,需要通过数据库隔离级别来解决,在标准SQL规范中定义了四种隔离级别:
- 未提交读(Read Uncommitted):最低隔离级别,一个事务能读取到别的事务未提交的更新数据,很不安全,可能出现丢失更新、脏读、不可重复读、幻读;
- 提交读(Read Committed):一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,不可能可能出现丢失更新、脏读,但可能出现不可重复读、幻读;
- 可重复读(Repeatable Read):保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务影响,可能可能出现丢失更新、脏读、不可重复读,但可能出现幻读;
- 序列化(Serializable):最高隔离级别,不允许事务并发执行,而必须串行化执行,最安全,不可能出现更新、脏读、不可重复读、幻读。
隔离级别越高,数据库事务并发执行性能越差,能处理的操作越少。因此在实际项目开发中为了考虑并发性能一般使用提交读隔离级别,它能避免丢失更新和脏读,尽管不可重复读和幻读不能避免,但可以在可能出现的场合使用悲观锁或乐观锁来解决这些问题。
9.1.1 事务类型
数据库事务类型有本地事务和分布式事务:
- 本地事务:就是普通事务,能保证单台数据库上的操作的ACID,被限定在一台数据库上;
- 分布式事务:涉及两个或多个数据库源的事务,即跨越多台同类或异类数据库的事务(由每台数据库的本地事务组成的),分布式事务旨在保证这些本地事务的所有操作的ACID,使事务可以跨越多台数据库;
Java事务类型有JDBC事务和JTA事务:
- JDBC事务:就是数据库事务类型中的本地事务,通过Connection对象的控制来管理事务;
- JTA事务:JTA指Java事务API(Java Transaction API),是Java EE数据库事务规范, JTA只提供了事务管理接口,由应用程序服务器厂商(如WebSphere Application Server)提供实现,JTA事务比JDBC更强大,支持分布式事务。
Java EE事务类型有本地事务和全局事务:
- 本地事务:使用JDBC编程实现事务;
- 全局事务:由应用程序服务器提供,使用JTA事务;
按是否通过编程实现事务有声明式事务和编程式事务;
- 声明式事务: 通过注解或XML配置文件指定事务信息;
- 编程式事务:通过编写代码实现事务。
9.1.2 Spring提供的事务管理
Spring框架最核心功能之一就是事务管理,而且提供一致的事务管理抽象,这能帮助我们:
- 提供一致的编程式事务管理API,不管使用Spring JDBC框架还是集成第三方框架使用该API进行事务编程;
- 无侵入式的声明式事务支持。
Spring支持声明式事务和编程式事务事务类型。
原创内容,转载请注明出处【http://sishuok.com/forum/blogPost/list/0/2502.html】
发表评论
-
spring原理
2013-07-31 23:21 8771、spring原理 s ... -
通过实例浅谈Spring运作机制
2013-07-31 23:06 1174看到这个标题大家可能又想:哎,又一个重新发明轮子的人。在这里 ... -
spring用到的设计模式
2013-06-24 21:45 1200spring源码也读了两遍了,但对于里面描述的关系还是不太 ... -
SPRING事务的属性有哪些?其中,事务隔离级别有哪几种?什么情况需要使用这几种事务隔离级别?
2013-04-14 20:45 3860Spring 声明式事务,propagation属性列表 PR ... -
Spring定时任务的几种实现
2013-01-24 10:32 1017Spring定时任务的几种实现 近日项目开发中需要执行一些 ... -
Spring多数据源解决方案
2012-10-02 22:49 1096... -
spring是如何管理 事务的
2012-07-08 14:43 1530Spring提供的事务管理可以分为两类:编程式的和声明式的。 ... -
【第六章】 AOP 之 6.9 代理机制 ——跟我学spring3
2012-07-07 12:36 875Spring AOP通过代理模式实现,目前支持两 ... -
【第九章】 Spring的事务 之 9.2 事务管理器 ——跟我学spring3
2012-07-07 12:37 10079.2.1 概述 ... -
【第九章】 Spring的事务 之 9.3 编程式事务 ——跟我学spring3
2012-07-06 00:03 9159.3 编程式事务 9.3.1 编程式事务 ... -
【第九章】 Spring的事务 之 9.4 声明式事务 ——跟我学spring3
2012-07-06 00:03 7599.4 声明式事务 9.4.1 声明式事务 ... -
我对AOP的理解
2012-07-06 00:02 8891、问题 问题:想要添加日志记录 ... -
我对IoC/DI的理解
2012-07-06 00:01 1028IoC IoC: Inversion of ... -
基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
2012-07-06 00:02 2360基于JDK动态代理和CGLIB动态代理的实现S ... -
Spring对事务管理的支持的发展历程(基础篇)
2012-07-05 23:00 9821、问题 Java代 ... -
阅读spring源码
2012-07-05 21:22 1725读Spring源码之前,你要先清楚,为什么你要用S ... -
spring aop 详解
2012-07-01 18:41 1187文章链接:http://stamen.itey ... -
Spring ioc 详解
2012-07-01 18:14 2052文章链接:http://stamen.itey ... -
spring事务探索
2012-07-01 16:46 1007文章链接:http://www.iteye.com/topic ... -
spring aopframework实现
2012-06-18 09:51 1097package cn.itcast.day3.aopfr ...
相关推荐
本教程聚焦于Spring框架中的事务管理,特别是数据库事务,这是确保数据一致性、完整性和可靠性的关键部分。 在Java开发中,事务处理是确保一组操作要么全部成功,要么全部失败的重要机制。Spring提供了多种事务管理...
标题“跟我学spring”和描述“spring 的使用,每个知识点和项目中的运用,20章的介绍。”暗示这是一份详细介绍Spring框架使用方法的教程或手册,覆盖了Spring的各个方面,并以实例为导向,深入探讨了每个知识点在...
《跟我学Spring3》这本书详细介绍了Spring框架在多个方面的应用,包括ORM支持、事务管理和Web框架集成等。以下是对这些章节内容的详细说明: 【第八章】 对ORM的支持: 1. **8.1 概述**:ORM(Object-Relational ...
《跟我学Spring3》这本书详细介绍了Spring框架与各种ORM(对象关系映射)框架的集成,以及Spring的事务管理和Web框架集成。以下是其中关键知识点的深入解析: **8. ORM支持** 1. **8.1 概述**:ORM允许开发者以面向...
《跟我学Spring3》这本书是针对Spring框架的深入学习指南,涵盖了多个关键章节,包括Spring对ORM(对象关系映射)的支持、事务管理和与其他Web框架的集成等内容。以下是各章节主要内容的详细阐述: 1. **第八章:对...
#### 9.1 数据库事务概述 - **事务的概念**:事务是一组操作的集合,这些操作被视为一个不可分割的工作单元。事务必须满足 ACID(原子性、一致性、隔离性、持久性)原则。 #### 9.2 事务管理器 - **Spring 事务...
《跟我学Spring3》是一本全面介绍Spring框架的教程,主要涵盖了Spring对ORM支持、事务管理以及与其他Web框架的集成等内容。以下是对其中关键知识点的详细解析: 1. **Spring对ORM的支持**: - **8.1 概述**:这...
《跟我学Spring3》是一本全面介绍Spring框架的教程,主要涵盖了Spring对ORM支持、事务管理、Web框架集成以及SSH集成开发等多个方面。Spring作为Java领域最流行的应用框架之一,其强大的功能和灵活性使得它在企业级...
《跟我学Spring3》是一本详细讲解Spring 3.0框架的教程,涵盖了Spring对ORM支持、事务管理、Web框架集成以及SSH集成等多个方面。以下是其中一些核心知识点的详细解析: 1. **Spring对ORM的支持**: - **8.1 概述**...