`
yanguz123
  • 浏览: 568036 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

\(^_^)/ Spring中的事务

 
阅读更多

详解spring事务属性:http://www.iteye.com/topic/78674

编程使用Spring事务管理,图解事务传播行为:http://www.iteye.com/topic/1122176

解惑 spring 嵌套事务:http://www.iteye.com/topic/35907

Spring声明式事务配置管理方法:http://www.cnblogs.com/rushoooooo/archive/2011/08/28/2155960.html

spring几种事务配置:http://www.iteye.com/topic/615413

参考:http://smallq.iteye.com/blog/415212

参考:http://lovetocool.iteye.com/blog/1132317

参考:http://lyq985.iteye.com/blog/1692285

参考:http://501565246-qq-com.iteye.com/blog/727075

 

 

 

 

 

 

四个事务属性:

1.事务的传播行为(PropagationBehavior)

2.事务的隔离级别(IsolationLevel)

3.事务的超时(TimeOut)

4.事务只读标志(ReadOnly)

 

 

 

 

 

 

 

事务的ACID特性:

1.原子性:事务必须是原子的,在事务结束的时候,事务中的所有任务必须全部成功完成,否则全部失败,事务回滚到事务开始之间的状态。 

2.一致性:事务必须保证和数据库的一致性,即数据库中的所有数据和现实保持一致。如果事务失败数据必须返回到事务执行之前的状态,反之修改数据和现实的同步。 

3.隔离性:隔离性是事务与事务之间的屏障,每个事务必须与其他事务的执行结果隔离开,直到该事务执行完毕,它保证了事务的访问的任何数据不会受其他事务执行结果的影响。 

4.持久性:如果事务成功执行,无论系统发生任何情况,事务的持久性都必须保证事务的执行结果是永久的。

 

 

 

 

 

 

 

 

五个事务隔离级别:

1.ISOLATION_DEFAUL:这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别

2.ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。 

3.ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

4.ISOLATION_REPEATEABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据。

5.ISOLATION_SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。 

 

 

 

 

 

 

 

 

事务的缺陷:

脏读取:当一个事务读取了另一个事务尚未提交的更新,就叫脏读取。在另一个事务回滚的情况下,当前事务所读取的另一个事务的数据就是无效的。 

不可重复读取:在一个事务中执行多次同样的查询操作,但每次查询的结果都不一样,就叫做不可重复读取,通常这种情况是由于数据在二次查询之间被另一个并发的事务所修改。 

幻影行:这是对事务危害最小的一个问候,它类似不可重复读取,也是一个事务的更新结果影响到另一个事务问题。但是它不仅影响另一个事务查询结果,而且还会使查询语句返回一些不同的行录行。

 

这3个问题危害程度依次为:脏读取最大-->不可重复读取-->幻影行最小。 

 

 

 

 

 

 

 

 

七个事务传播行为:

1.PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 

2.PROPAGATION_SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。 

3.PROPAGATION_MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

4.PROPAGATION_REQUIRES_NEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

5.PROPAGATION_NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。 

6.PROPAGATION_NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常。

7.PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。

 

嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。 

 

PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别:

它们非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA事务管理器的支持。 

使用PROPAGATION_NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。DataSourceTransactionManager使用savepoint支持PROPAGATION_NESTED时,需要JDBC 3.0以上驱动及1.4以上的JDK版本支持。其它的JTA TrasactionManager实现可能有不同的支持方式。 

 

 

 

 

 

 

 

 

本地事务与分布式事务:

1.本地事务:完全依赖于DB、JMS自身,如直接调用jdbc中的conn.commit();这里没应用服务器什么事,所以也不支持多数据源的全局事务。 

2.分布式事务:在JavaEE世界的事务在JTA、JTS规范和XA Sources之上实现。

 

 

 

 

 

 

 

 

两种Spring事务管理的方式

1.编程式:手工调用jdbc的connection事务方法和使用JTA接口都属于编程式开发,在EJB中叫BMT(Bean管理事务)。 

2.声明式 

 

 

 

 

 

 

 

三个事务并发处理中的锁:

1.共享锁:共享锁用于读取数据操作,它允许其他事务同时读取某锁定的资源,但不允许其他事务更新它。 

2.排他锁:排它锁用于修改数据的场合。它锁定的资源,其他事务不能读取也不能修改。 

3.更新锁:更新锁在更新操作的初始化阶段用来锁定可能要被修改的资源,从而避免使用共享锁造成的死锁现象。

 

 

 

 

分享到:
评论

相关推荐

    iBATIS-SqlMaps-2_cn.rar_ibatis/spring

    在Spring中配置iBATIS,开发者可以通过Spring的DataSource和TransactionManager来管理数据源和事务,同时,通过SqlSessionFactoryBean来创建SqlSessionFactory,进一步创建SqlSession,从而执行SQL操作。 此外,...

    [轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发

    【轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发】这个主题主要涉及的是Java EE领域中的三大框架——Struts2、Spring3和Hibernate的集成应用,这是构建现代Java后端系统的一种常见方式。这些框架...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    总之,Spring JDBC是Spring框架中强大的数据库访问工具,它通过提供一系列的模板类和事务管理机制,极大地简化了JDBC编程,提高了代码的可读性和可维护性。正确理解和使用Spring JDBC,可以让我们在开发过程中更加...

    Spring事务原理、Spring事务配置的五种方式

    Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两个核心:...

    尚学堂_Spring_0100_模拟Spring

    在学习过程中,我们可能将探讨如何定义和使用Spring的切面,以及如何通过声明式的方式实现事务管理。 标签“源码”表明我们将有机会分析Spring的源代码,这对于理解Spring的工作机制至关重要。通过阅读源码,我们...

    Spring中事务的传播属性详解

    ### Spring中事务的传播属性详解 #### 一、引言 在使用Spring框架进行应用程序开发时,事务管理是一项非常重要的特性。Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理因其...

    SpringTest_springtest_spring_java_Framework_

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)能力而著名。"SpringTest_springtest_spring_java_...

    Spring示例_Printer_Spring_AOP_Spring_Proxy

    在本示例中,"Spring示例_Printer_Spring_AOP_Spring_Proxy" 主要关注的是Spring框架中的核心概念,特别是AOP(面向切面编程)和代理模式的应用。让我们深入探讨这些知识点。 首先,Spring框架是Java开发中最常用的...

    spring事务与数据库操作

    ### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...

    Spring2.5实现事务管理(本地事务、分布式事务).doc

    在 Spring 2.5 中,事务管理可以分为两种:本地事务和分布式事务。本地事务是指在同一个进程中对数据源的访问,分布式事务是指跨多个进程或系统对数据源的访问。 本地事务配置文件: 在 Spring 2.5 中,本地事务的...

    Spring_Hibernate使用TransactionInterceptor声明式事务配置.doc

    在Spring框架中,事务管理器是核心组件之一,它负责管理事务的生命周期,包括事务的开始、提交、回滚等操作。 首先,我们需要定义一个事务管理器bean,这个bean将负责管理事务的生命周期。在Spring_Hibernate框架中...

    FF.MSOL.SOA.rar_jpa hibernate_spring hibernate_spring mvc

    标题中的“FF.MSOL.SOA.rar_jpa hibernate_spring hibernate_spring mvc”表明这是一个关于Java企业级开发的资源包,其中涉及到的主要技术栈是JPA(Java Persistence API)、Hibernate、Spring以及Spring MVC。...

    springjdbc.zip_SpringJDBC_spring jdbc_spring 增删改查_springjdbc xml

    5. **事务管理**:Spring提供了声明式事务管理,可以在XML配置中定义`PlatformTransactionManager`,如`DataSourceTransactionManager`,并使用`@Transactional`注解在方法级别声明事务边界。 6. **增删改查操作**...

    Spring事务管理Demo

    Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...

    news.rar_spring 新闻_spring新闻_struts spring

    标题中的"news.rar_spring 新闻_spring新闻_struts spring"揭示了这是一个关于Spring框架集成Struts和Hibernate的新闻发布模块项目。在这个项目中,开发者可能使用了Spring框架来管理依赖注入,实现业务逻辑,以及...

    Spring的事务配置的五种方式

    在Spring中,事务管理通常分为三部分:DataSource、TransactionManager和代理机制。DataSource是数据源,TransactionManager是事务管理器,而代理机制则是实现事务控制的关键。 1. **基于XML的AOP代理配置** 这是...

    Spring事务五种不同的代理配置

    除了声明式事务管理,Spring 还提供了编程式事务管理,即在代码中显式地开始、提交、回滚事务。这种方式更灵活,但维护起来更复杂,通常只在声明式事务管理无法满足需求时使用。 每种事务配置方式都有其适用场景和...

    王勇_JAVA教程_Spring_源代

    - `spring_autowrire_byName`和`spring_autowrire_byType`探讨的是Spring的自动装配功能,它能根据bean的名字或类型自动将依赖注入到其他bean中,减少了XML配置的繁琐工作。 - 通过`byName`和`byType`,你可以学习...

    spring_day03_spring_

    标题中的"spring_day03_spring_"表明了本次学习的主题是关于Spring框架的第三天课程,而描述中的"heima spring source code day 03"则提示我们将深入研究黑魔法(可能指复杂或深入的内容)——Spring框架的源码。...

    spring-tx-5.0.0.0.RELEASE.jar_java开发_spring-tx-5.0.0_

    Spring TX是Spring框架中的事务抽象层,它为应用程序提供了声明式和编程式的事务管理。声明式事务管理是Spring的一个强大特性,允许开发者通过简单的注解或XML配置来控制事务边界,从而极大地简化了事务处理代码。...

Global site tag (gtag.js) - Google Analytics