`
zhanghteye
  • 浏览: 51242 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring支持的事务管理类型有哪些?

 
阅读更多
  • 编程式事务管理,在代码中显式调用开启事务、提交事务、回滚事务的相关方法
  • 声明式事务管理,底层是建立在 AOP 的基础之上。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

实际应用

  • 基于 <tx> 和 <aop> 命名空间的声明式事务管理是目前推荐的方式,其最大特点是与 Spring AOP 结合紧密,可以充分利用切点表达式的强大支持,使得管理事务更加灵活。
  • 基于 @Transactional 的方式将声明式事务管理简化到了极致。开发人员只需在配置文件中加上一行启用相关后处理 Bean 的配置,然后在需要实施事务管理的方法或者类上使用 @Transactional 指定事务规则即可实现事务管理,而且功能也不必其他方式逊色。

拓展:

事务隔离级别

  • 隔离级别是指若干个并发的事务之间的隔离程度。
  • 默认隔离级别:TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。

事务传播行为

  • 事务的传播行为指如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
  • 默认传播行为:TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

事务的回滚规则

  • 通常情况下,如果在事务中抛出了未检查异常(继承自 RuntimeException 的异常),则默认将回滚事务。如果没有抛出任何异常,或者抛出了已检查异常,则仍然提交事务。我们也可以根据需要人为控制事务在抛出某些未检查异常时任然提交事务,或者在抛出某些已检查异常时回滚事务。

什么是脏读,不可重复读,幻读?

  • 脏读: 指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
  • 不可重复读: 指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。
  • 幻读: 指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

 

 

分享到:
评论

相关推荐

    Spring事务管理Demo

    1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、Hibernate、MyBatis等)配置相应的事务管理器。 2. 开启事务:使用`@Transactional`注解标记需要在事务中执行的方法。 3. 业务逻辑:在事务中...

    Spring事务类型祥解

    首先,Spring支持两种事务管理方式:编程式事务管理和声明式事务管理。 1. **编程式事务管理**: 编程式事务管理通过在代码中直接调用`PlatformTransactionManager`接口的`beginTransaction()`, `commit()`, `...

    spring_如何管理事务的

    Spring支持两种类型的事务管理方式:编程式事务管理和声明式事务管理。 #### 二、编程式事务管理 编程式事务管理允许开发人员通过编程的方式直接控制事务的开始、提交或回滚。这种方式相对灵活,但也存在一些缺点...

    spring3.0两种事务管理配置

    Spring 3.0 事务管理配置 ...Spring 3.0 的事务管理配置提供了两种方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都可以实现事务管理的目标,但它们有不同的配置方式和优缺点。

    spring_事务管理(实例代码)

    2. 基于注解的声明式事务管理:Spring支持在方法上使用@Transactional注解来标记需要事务管理的方法。这个注解可以设置事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别、读写模式以及超时时间。例如,`@...

    spring-tx事务管理实例

    隔离级别是事务管理中的另一个核心概念,Spring支持数据库默认的五种隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。不同的隔离级别会带来不同的并发问题,如脏读、不可重复读和幻读...

    spring事务与数据库操作

    Spring支持两种类型的事务管理:编程式事务管理和声明式事务管理。其中声明式事务管理因其易于使用和维护而被广泛采用。 ##### 1.1 Spring声明式事务介绍 Spring的声明式事务管理是通过配置文件或注解的方式来实现...

    Spring 框架的事务管理及应用

    Spring框架提供了两种类型的事务管理支持:编程式事务管理和声明式事务管理。 **1. 编程式事务管理** 编程式事务管理允许开发者通过编程的方式显式地管理事务的开始、提交和回滚。这种方式相对灵活,但通常需要...

    spring事务管理

    Spring事务管理主要包括两种类型:编程式事务管理和声明式事务管理。 - **编程式事务管理**:通过编写代码来控制事务的开始、提交或回滚等操作。这种方式灵活度高,但会使得代码变得冗余且难以维护。 - **声明式...

    Spring事务流程图

    4. **事务隔离**:Spring支持多种事务隔离级别,如READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE,不同的隔离级别能防止特定类型的并发问题。 5. **事务传播行为**:Spring提供了七种事务传播...

    Spring+JOTM 分布式事务管理

    Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...

    Spring事务与Java事务比较

    Spring 提供了 TransactionTemplate 和 PlatformTransactionManager 接口来支持编程式事务管理。 2. 声明式事务管理:这是 Spring 的一大特色,它允许开发者在配置文件或注解中声明事务的边界,而不必在业务代码中...

    spring事务详解

    3. 声明式事务管理:利用Spring AOP的特性,Spring支持声明式事务管理,即可以在配置文件或注解中声明事务属性,这使得事务管理更加灵活和方便。 Spring的事务管理还提供了强大的事务传播行为和隔离级别配置,...

    spring 事务基于注解模式

    Spring支持五种隔离级别: - READ_UNCOMMITTED:最低级别,可能导致脏读、不可重复读和幻读。 - READ_COMMITTED:防止脏读,但允许不可重复读和幻读。 - REPEATABLE_READ:防止脏读和不可重复读,但允许幻读。 - ...

    spring事务管理.rar

    Spring支持两种事务管理方式: - **编程式事务管理**:通过`PlatformTransactionManager`接口及其实现(如`HibernateTransactionManager`)来手动管理事务。开发者需要在代码中调用开始、提交或回滚事务的方法。 -...

    Spring_tx事务

    Spring的事务管理也支持AOP(面向切面编程),它可以在事务开始前、结束后以及发生异常时执行自定义逻辑。例如,我们可以创建一个通知(Advice)来记录事务日志或处理其他与事务相关的任务。 在实际项目中,声明式...

    Spring事务详解

    本文将深入探讨Spring事务管理的概念、类型、配置方式以及在实际开发中的应用。 首先,我们要理解什么是事务。事务是数据库操作的基本单元,它确保一组数据库操作要么全部成功,要么全部失败。事务有四大特性,即...

    spring基于AspectJ实现事务控制

    在Spring框架中,提供了多种事务管理方式,其中之一就是基于AspectJ的事务控制。本文将深入探讨如何在Spring中利用AspectJ实现事务控制。 首先,我们需要理解什么是AspectJ。AspectJ是一种面向切面编程(AOP)的...

    Spring事务管理配置文件问题排查

    1. **Spring事务管理类型**: - **编程式事务管理**:通过`TransactionTemplate`或直接使用`PlatformTransactionManager`接口进行事务管理。这种方式灵活,但可能导致代码侵入性高。 - **声明式事务管理**:基于...

Global site tag (gtag.js) - Google Analytics