关于spring事务传播行为非事务方式的理解

关于 Spring 事务传播行为非事务方式的理解

在 Spring 中,事务传播行为是决定事务如何传播的一个特性。当当前代码执行需要调用另一个方法时,如何处理这个方法的事务就取决于事务传播行为的设置。

Spring 中有 7 种事务传播行为,分别是:

  1. PROPAGATION_REQUIRED(默认)

表示在调用方法执行时,如果当前已经存在一个事务,那么这个方法将在这个事务中运行。如果当前没有事务,它会启动一个新的事务。

简单来说,就是如果当前方法本身没有开启事务,那么它会新建一个事务,并且这个新建的事务将成为当前方法及其调用的方法们所在的共享事务。

示例1:

假设我们有 ServiceA 和 ServiceB 两个服务,它们都在一个数据库事务中运行。当 ServiceA 调用 ServiceB 时,如果此时 ServiceB 中的代码需要开启一个事务,那么这个事务将合并到 ServiceA 所在的事务中,以保证整个过程中只有一个事务在运行。

  1. PROPAGATION_SUPPORTS

表示在调用方法执行时,如果当前已经存在一个事务,那么这个方法将在这个事务中运行。如果当前没有事务,它会基于非事务方式运行,而不是启动一个新的事务。

简单来说,就是如果当前方法所在的调用栈中存在事务,那么这个方法将以事务方式运行。如果当前方法所在的调用栈中不存在事务,那么这个方法就不会开启事务,而是以非事务方式运行。

示例2:

假设我们有一个轻量级的系统,它没有对数据库事务进行特别要求。假设我们又有一个 ServiceC,它需要在数据库中修改数据。而这个 ServiceC 本身并不需要运行在事务中。这时候,我们可以把 ServiceC 的传播行为设置为 PROPAGATION_SUPPORTS,以便它可以根据上下文的需求运行在事务中或者非事务中。

以上就是关于 Spring 事务传播行为非事务方式的理解的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于spring事务传播行为非事务方式的理解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • LINUX系统下MySQL 压力测试工具super smack

    那么下面我将详细讲解“LINUX系统下MySQL 压力测试工具super smack”的完整攻略,包含安装、配置、使用和示例。 安装 在Linux下安装Super Smack,首先需要确保已经安装了MySQL客户端和Perl。可以使用以下命令进行安装: sudo apt-get install mysql-client sudo apt-get instal…

    database 2023年5月22日
    00
  • MySQL中char(36)被认为是GUID导致的BUG及解决方案

    MySQL中char(36)被认为是GUID导致的BUG及解决方案 有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。 Stack Trace:    在 System.Guid..c…

    MySQL 2023年4月13日
    00
  • Java中消息队列任务的平滑关闭详解

    我将为您详细讲解Java中消息队列任务的平滑关闭的完整攻略。 什么是消息队列 消息队列是一种高效的异步通信机制,它能够将消息发送到队列中,然后由多个消费者对这些消息进行处理。消息队列通常用于应用程序之间的通信,例如,在电商网站中,订单服务将订单信息发送到消息队列,而物流服务则从消息队列中获取这些消息进行处理。 Java中的消息队列 在Java中,最流行的消息…

    database 2023年5月22日
    00
  • 关于SpringCloud的微服务以及组件详解

    关于SpringCloud的微服务以及组件详解 SpringCloud是由SpringBoot开发的一套用于构建分布式系统的框架和工具集。它为开发人员提供了各种各样的解决方案,例如服务发现、配置管理、负载平衡、API网关等等。下面就来详细介绍一下关于SpringCloud的微服务以及组件详解。 微服务 在传统的架构中,一个应用程序通常都是一个单独的、集成的单…

    database 2023年5月22日
    00
  • Python2.x利用commands模块执行Linux shell命令

    使用commands模块可以方便地在Python中执行Linux shell命令。但需要注意的是,commands模块在Python 2.6之后已不再被支持,应该使用subprocess模块代替。 以下是使用commands模块执行Linux shell命令的攻略: 导入commands模块 import commands 获取命令的输出 调用command…

    database 2023年5月22日
    00
  • 怎么永久完美激活Toad for Oracle 2022 附激活码+激活教程

    首先,需要强调一下,我们不鼓励使用盗版软件,本文仅提供技术交流,不为任何使用此文内容从事违法行为而承担任何责任。 Toad for Oracle 2022是一款非常专业的Oracle数据库管理和开发工具,对于Oracle的工作人员和开发人员来说都是非常重要的工具。本文将介绍如何永久完美激活Toad for Oracle 2022。 下载Toad for Or…

    database 2023年5月21日
    00
  • linux上mysql安装详细教程

    Linux上MySQL安装详细教程 确认系统环境 在进行MySQL安装之前,需要确认Linux操作系统是否已经安装好。此处以Debian/Ubuntu系统为例,确认操作系统版本方法如下: cat /etc/issue 确认Linux内核版本方法如下: uname -r 安装MySQL 更新apt-get工具 在Debian/Ubuntu系统中,可以使用以下命…

    database 2023年5月22日
    00
  • Node.js动手撸一个静态资源服务器的方法

    以下是Node.js动手撸一个静态资源服务器的完整攻略: 什么是静态资源服务器 静态资源服务器是一个可以将静态文件(如 HTML,CSS,JavaScript,图片等)通过 HTTP 服务器向客户端提供这些文件的服务器。这种服务器通常是非常简单的,只是通过 HTTP 将文件发送给客户端,而不做任何处理。 构建静态资源服务器 要构建一个静态资源服务器,需要完成…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部