`
为了明天
  • 浏览: 115021 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring @Transactional 事务7种传播方式

阅读更多
Spring事务的传播行为

在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。

Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked

如果遇到checked意外就不回滚。

如何改变默认规则:

1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

在整个方法运行前就不会开启事务

       还可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样就做成一个只读事务,可以提高效率。

       各种属性的意义:

       REQUIRED:业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。

       NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。

       REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。

       MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。

       SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。

       NEVER:该方法绝对不能在事务范围内执行。如果在就抛例外。只有该方法没有关联到任何事务,才正常执行。

       NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。
分享到:
评论

相关推荐

    后端 Java Spring Data Jpa @Transactional 介绍

    总结来说,`@Transactional`是Spring提供的一种强大的工具,它简化了事务管理,使得在Java后端开发中处理复杂的数据一致性问题变得更加便捷。通过合理使用和配置,我们可以有效地确保业务逻辑的正确执行,并保护...

    Spring @Transactional工作原理详解

    在Spring框架中,`@Transactional`注解是一个强大的工具,用于声明式地管理事务。它使得开发者无需显式地在代码中控制事务的开始、提交和回滚,从而提高了代码的可读性和可维护性。下面我们将深入探讨`@...

    Spring中@Transactional事务回滚(含实例

    `@Transactional`是Spring提供的一个注解,用于在方法级别或类级别定义事务属性,如事务的传播行为、隔离级别、读写模式以及超时设置。当一个方法被标记为`@Transactional`时,Spring会自动管理事务的开始、提交或...

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    在Java应用中,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 **编程式事务管理** 是通过调用`PlatformTransactionManager`接口提供的方法来手动控制事务的开始、提交、回滚。例如,你...

    Spring3事务管理——使用@Transactional 注解.rar

    - ` propagation`: 事务传播行为,定义了方法调用如何嵌套在事务中。例如,`PROPAGATION_REQUIRED`是最常见的,表示如果没有当前事务,就新建一个。 - ` isolation`: 隔离级别,如`ISOLATION_DEFAULT`、`ISOLATION...

    Spring声明式事务@Transactional知识点分享

    Spring 提供了 7 种事务传播行为,分别是 REQUIRED、REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER 和 NESTED。 在使用 @Transactional 注解时,需要注意以下几点: * @Transactional 注解可以应用于...

    什么情况会导致@Transactional事务失效?

    在Java编程中,`@Transactional`注解是Spring框架提供的一种事务管理机制,它使得开发者能够在方法级别方便地声明事务边界。然而,在某些特定情况下,`@Transactional`可能会失效,导致事务无法正常工作。以下是一些...

    Spring @Transactional注解失效解决方案

    Spring @Transactional 注解失效解决方案 ...通过了解 @Transactional 注解的特性和事务传播模式,并遵循解决方案,我们可以解决 @Transactional 注解不回滚的问题,确保事务管理的正确性和可靠性。

    Java注解@Transactional事务类内调用不生效问题及解决办法

    Java注解@Transactional事务类内调用不生效问题及解决办法 Java注解@Transactional是Java中的一种注解,主要用于标记事务边界。然而,在某些情况下,@Transactional注解可能不会生效,例如在同一个类中的方法调用...

    spring的@Transactional注解详细用法1

    Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。本文将重点介绍基于`@Transactional`注解的声明式事务管理。 声明式事务管理是Spring框架的一大特色,它通过AOP(面向切面编程)实现,使得...

    Spring中的@Transactional事物回滚实例源码

    首先,`@Transactional`是Spring提供的一个编程式事务管理方式,它允许我们在方法上声明事务属性,如传播行为、隔离级别、读写模式以及是否回滚。例如: ```java @Service public class UserService { @...

    Spring事务之7种传播行1

    Spring定义了七种不同的事务传播行为,以满足各种复杂的业务场景需求。 1. PROPAGATION_REQUIRED 这是最常用的传播行为,如果当前存在事务,那么方法将在这个事务中运行;如果当前没有事务,Spring会自动创建一个新...

    test-transactional:关于spring中@Transactional注解传播属性原理的实验

    关于spring中@Transactional注解传播属性原理的实验 具体方法: 主体形式:a方法调用b方法 a插入数据“one” b插入数据“two” a、b方法都可以有不同的传播级别或者不加事务注解(none): required(rd), required_...

    spring的@Transactional注解用法解读

    注解中可以指定事务属性,如`propagation`(事务传播行为)、`isolation`(隔离级别)、`rollbackFor`(触发回滚的异常类型)等。 - **默认属性**:如果不指定,通常默认的传播行为是`PROPAGATION_REQUIRED`,意味...

    spring 事务传播 demo

    Spring定义了7种不同的事务传播行为: 1. **PROPAGATION_REQUIRED**:这是默认的传播行为,表示如果当前存在事务,则加入该事务;如果不存在,则创建一个新的事务。这也是最常用的模式。 2. **PROPAGATION_...

    Spring中事务的传播属性详解

    本文将详细介绍Spring中的事务传播属性,并通过具体的例子来解释每种传播行为的特点。 #### 二、事务传播属性概述 事务传播行为(Propagation)定义了当一个事务方法被另一个事务方法调用时的行为。在Spring中,...

    spring3.0两种事务管理配置

    Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...

    spring 事务传播

    ### Spring 事务传播属性详解 #### 一、Spring 事务基础概述 在深入探讨Spring框架中的事务传播属性之前,我们先来简要回顾一下Spring事务的基础概念。Spring框架提供了强大的事务管理功能,允许开发者通过声明式...

    Spring事务传播机制.docx

    Spring 事务传播机制 Spring 事务传播机制是指在 Spring 框架中,事务的传播和嵌套机制。当我们在使用 Spring 所提供的事务功能时,如果是仅仅处理单个的事务,是比较容易把握事务的提交与回滚,不过一旦引入嵌套...

    基于Spring JDBC的事务管理

    Spring JDBC提供了多种事务传播方式,例如PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED等。 事务的隔离 事务的隔离是指事务之间的隔离级别。Spring JDBC提供了多种事务隔离级别,例如...

Global site tag (gtag.js) - Google Analytics