`

spring Transaction

阅读更多
事务的四个属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。
1.原子性(Atomic)
    最重要的原则,也是最容易理解的原则。被事务管理的所有方法,要么一起被提交,要么一起回滚。
举例:在股票交易时,除了记录交易的过程,还要更新交易完成之后的账户状态。

2.一致性(Consistency)
    事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

3.隔离性(Isolation)
    简单的说:在处理一个事务的时候,如果有一个事务同时处理,必须等待这个事务处理完毕,才能进行下一次处理
举例:一个厕所就一个马桶,必须一个人上完,例外一个人再进去上.

4.持久性(Durability)
    持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。
举例:在执行事务的时候,突然停电,等再来电的时候,有个事务记录通知重新执行下这个事务.

事务隔离级别
    一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。
数据库并发操作存在的异常情况:(当没有事务存在的情况下会发生以下情况)
1. 更新丢失(Lost update):同时改,更新丢失
2. 脏读取(Dirty Reads):一个在读另外一个没提交的数据,为脏读(有可能人家不提交了)
3. 非重复读取(Non-repeatable Reads):一个不停在读,一个在修改或者删除(数据总量可能不变或减少)
4. 两次更新问题(Second lost updates problem):一个读完修改,另外一个读完修改,后者成功(与更新丢失区别是,那是同时该,这个是一前一后)
5. 幻读(Phantom Reads):一个不停在读,一个在添加一条记录(数据总量变了)与非重复读的区别就是那个是修改删除,这个是添加

为了避免上面出现几种情况在标准SQL规范中定义了4个事务隔离级别,不同隔离级别对事务处理不同 。
1.未授权读取:也称未提交读.如果一个事务开始写数据,其他写数据的动作将等待,但是允许其他事务读取,(排他锁)
2.授权读取:也称提交读.
3.可重复读取:禁止不可重复读取和脏读取。但是有时可能出现幻影数据
4. 串行(Serializable):也称可串行读。提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作事务访问到。事务隔离的最高级别,事务之间完全隔离。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。

  隔离级别    更新丢失 脏读取  重复读取  幻读
未授权读取          N       Y        Y      Y
   授权读取          N       N        Y      Y
  可重复读取         N       N        N      Y
    串行            N       N         N      N


Spring事务隔离级别:
PROPAGATION_REQUIRED 如果没事务,就新建事务
简单的说:一个方法要运行,先看看自己在不在一个事务内部,如果在,好我什么都不说,好好工作(不启新事务),如果不在,我新建一个事务出来,然后在这个新建事务内运行我(我就是那个方法);
PROPAGATION_SUPPORTS 有事务就支持当前事务,没有事务就已非事务执行
简单的说:一个方法比较随意,我上面有事务,我就在事务里运行,如果没事务,我就是非事务运行.
PROPAGATION_MANDATORY 有事务的话就支持当前事务,没有就抛异常
简单的说:这个方法必须在事务中运行,不然就要大叫:我异常了.  他只能被父事务调用
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,就把当前事务挂起,然后建立一个事务出来执行,执行完毕,再去执行刚才挂起的那个事务.
简单的说:我不管上面有没有事务在,我是要新建事务的, 如果没有好说, 我自己做自己的事,如果有,那要先等我,我将事务处理完毕后,再处理外部事务吧. 如果我处理失败,我自己回滚,不影响外面的事务,你回滚不回滚不关我的事.
PROPAGATION_NOT_SUPPORTED 以非事务工作,如果当前有事务,那就挂起当前事务
简单的说:声明自己的是个非事务,如果有事务和我同时执行,那事务先挂起,等我运行完,你在处理
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,就抛异常.
简单的说:一个方法,就是不让事务包着,包着就出异常
PROPAGATION_NESTED
理解Nested的关键是savepoint。他与PROPAGATION_REQUIRES_NEW的区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与他的父事务相互独立, 而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。
而Nested事务的好处是他有一个savepoint。也就是说ServiceB.methodB失败回滚,那么ServiceA.methodA也会回滚到savepoint点上,ServiceA.methodA可以选择另外一个分支,比如 ServiceC.methodC,继续执行,来尝试完成自己的事务。 但是这个事务并没有在EJB标准中定义。
分享到:
评论

相关推荐

    springTransaction.rar

    这个名为"springTransaction.rar"的压缩包文件包含了一个关于Spring事务管理的小型示例,旨在演示如何使用Spring的事务传播机制来处理数据库操作,特别是转账功能的实现。 首先,让我们了解一下什么是事务。在...

    springtransaction 事务管理

    在实际项目中,`springtransaction`工程可能是包含了一个完整的示例,用于演示如何在MyEclipse环境中配置和使用Spring的事务管理功能。开发者可以通过导入此工程,学习和实践Spring事务管理的配置与使用,从而更好地...

    spring-transaction.jar.zip

    "spring-transaction.jar"正是提供了Spring事务管理的类库,它包含了一系列用于处理事务的接口、类和配置元素,使得开发者能够方便地实现事务控制。 一、Spring 事务管理概述 Spring事务管理分为编程式事务管理和...

    Spring 常用 Transaction Annotation

    本篇主要聚焦于"Spring 常用 Transaction Annotation",即声明式事务管理,这是一种更简洁、易于维护的事务控制方式。 首先,Spring的声明式事务管理基于AOP(面向切面编程),它允许我们在不修改业务代码的情况下...

    Spring攻略(第三版)源代码

    12. Spring Transaction Management 13. Spring Batch 14. Spring NoSQL and Big Data 15. Spring Java Enterprise Services and Remoting Technologies 16. Spring Messaging 17. Spring Integration 18. Spring ...

    SimpleSpringMVCWithTxSupport:使用 Spring Transaction 支持的简单 Spring MVC 应用程序

    使用 Spring Transaction 支持的简单 Spring MVC 应用程序,带有 @Transactional 注释和 JPA。 配置为与 Weblogic 事务管理器集成。 此示例应用程序仅用作配置了 Spring Transaction 支持的 Spring MVC 应用程序的...

    org.springframework.transaction-3.2.2.RELEASE

    org.springframework.transaction-3.2.2.RELEASE最新版本

    Spring在Transaction事务传播行为种类

    ### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...

    spring类库 spring类库

    6. **Spring Transaction**:事务管理模块提供了声明式和编程式的事务管理,确保了在分布式环境下的数据一致性。 7. **Spring Aspects**:此模块提供了AOP的扩展,支持自定义切面和通知类型,增强了Spring的面向切...

    Spring事务管理的jar包

    在Java企业级应用开发中,Spring框架以其强大的功能和灵活性被广泛应用,特别是在事务管理方面。Spring提供了全面的事务管理解决方案,使得开发者可以方便地控制事务的边界,保证数据的一致性和完整性。本篇将深入...

    spring核心jar包

    7. **Spring Transaction**: 提供了一致的事务管理接口,支持编程式和声明式事务管理。这使得事务管理可以跨不同的数据访问技术进行。 8. **Spring MVC**: 是Spring提供的用于构建Web应用的模型-视图-控制器(Model...

    Spring3_jar.zip

    SpringTransaction是Spring框架的事务管理模块,它提供了一种声明式和编程式的事务管理方式。声明式事务管理允许我们在配置文件中定义事务边界,而无需在代码中显式控制事务开始和结束。编程式事务管理则通过...

    spring4.0完整jar包

    6. **Spring Transaction**:提供了一种声明式和编程式事务管理机制,可以在多个数据库操作之间确保数据的一致性。 7. **Spring Web**:针对Web开发的模块,包含Spring MVC(Model-View-Controller)和Spring ...

    spring 4.1 jar包

    3. **Spring Transaction** (spring-tx-4.1.6.RELEASE.jar): 事务管理是Spring的核心功能之一,它允许开发者声明性地管理事务,提供编程式和声明式的事务处理,支持多种事务API如JTA、JDBC、Hibernate等。...

    spring jar 包详解

    - **功能简介**:包含了 Spring DAO、Spring Transaction 进行数据访问的所有类。 - **应用场景**:适用于需要进行数据访问操作的项目。 - **依赖关系**:依赖于 `spring-core.jar`、`spring-beans.jar`、`spring-...

    Spring Data JPA的优点和难点.pdf

    - Spring Data JPA可以无缝地与Spring Boot、Spring MVC、Spring Transaction管理等组件集成,为开发者提供了完整的解决方案,降低了系统的复杂性。 然而,尽管Spring Data JPA带来了诸多便利,但在实际使用中也会...

    笔者学习Spring4.3.7用到的jar包

    7. **Spring Transaction**:提供了统一的事务管理接口,无论是本地事务还是分布式事务,都能进行统一的管理和控制。`@Transactional`注解使得事务管理变得简单。 8. **Spring Aspects**:提供了AOP的实现,包括...

    spring recipe 英文版

    Spring Transaction Management 事务管理是保证数据一致性的重要手段,Spring 提供了全面的事务管理功能,可以方便地应用于不同的业务场景中。 #### 12. Spring Batch 对于需要处理大量数据的任务,Spring Batch...

    Spring事务管理和SpringJDBC思维导图

    在思维导图"Spring Transaction.twd"中,可能包含了Spring事务管理的各个概念和它们之间的关系,如事务的ACID属性(原子性、一致性、隔离性和持久性),事务管理器,以及声明式和编程式事务管理的实现方式。...

    spring学习:spring data jpa

    6. **Integration with Spring Transaction Management**:Spring Data JPA与Spring的事务管理无缝集成,可以方便地进行事务控制。 在实际使用中,我们需要配置Spring Data JPA,这通常涉及到以下步骤: 1. 添加...

Global site tag (gtag.js) - Google Analytics