关于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日

相关文章

  • ubuntu下mysql的常用命令

    下面是详细讲解“ubuntu下mysql的常用命令”的攻略。 一、安装MySQL Ubuntu下安装MySQL数据库可以通过以下命令: sudo apt-get update # 更新软件包列表 sudo apt-get install mysql-server # 安装MySQL数据库服务器 在安装MySQL的过程中,会有提示框要求你设置root用户的密码…

    database 2023年5月22日
    00
  • Linux中Oracle服务启动和停止脚本与开机自启动

    下面是Linux中Oracle服务启动和停止脚本与开机自启动的完整攻略。 介绍 Oracle是一个非常流行的关系型数据库软件,在Linux系统中也被广泛使用。在使用Oracle之前,需要通过脚本启动和停止Oracle服务,并且可以配置Oracle服务在系统启动时自动启动。 启动Oracle服务 为了启动Oracle服务,我们需要使用系统管理员的身份登录到Li…

    database 2023年5月22日
    00
  • 推荐一款神仙颜值的 Redis 客户端工具(速收藏)

    推荐一款神仙颜值的 Redis 客户端工具(速收藏) Redis 是一个高性能的 in-memory 数据库,被广泛应用于缓存、队列、计数器等应用场景中。随着 Redis 的广泛使用,可视化的 Redis 客户端工具也越来越多,其中一个比较不错的工具是 RedisInsight。 1. RedisInsight RedisInsight 是一个由 Redis…

    database 2023年5月22日
    00
  • ThinkPHP查询语句与关联查询用法实例

    首先我们需要了解一下ThinkPHP查询语句与关联查询的基本语法和用法。 查询数据 基础查询 常用的基础查询语句包括查询所有、查询单条数据和查询多条数据等。具体语法如下: 查询所有数据 php $list = Db::name(‘table’)->select(); 查询单条数据 php $info = Db::name(‘table’)->wh…

    database 2023年5月22日
    00
  • PHP+sqlite数据库操作示例(创建/打开/插入/检索)

    下面是关于“PHP+sqlite数据库操作示例”的完整攻略。 1. 准备工作 在开始操作sqlite数据库之前,请确保已经安装PHP和sqlite扩展,并且已经配置好环境变量。同时还需要了解如何使用PHP对sqlite进行操作。 2. 创建/打开sqlite数据库 要在PHP中创建一个sqlite数据库,可以使用以下代码: $db = new SQLite3…

    database 2023年5月21日
    00
  • 对比 elasticsearch 和 mysql

    对比 elasticsearch 和 mysql 最近阅读了elasticsearch的官方文档,学习了它的很多特性,发现elasticsearch和mysql有很多地方类似,也有很多地方不同。这里做一个对比,帮助大家加深对elasticsearch的理解。 特性 elasticsearch mysql 备注 场景 全文搜索,日志处理,空间数据分析 表结构存…

    MySQL 2023年4月8日
    00
  • 优化Node.js Web应用运行速度的10个技巧

    优化Node.js Web应用运行速度是一个关键的问题,以下是一些可以提高Node.js Web应用运行速度的技巧: 1. 使用最新版本的Node.js 选择最新的Node.js版本可以提高Web应用的性能。在当前的Node.js版本中,V8引擎可以处理更多的请求,Node.js的新特性可以加快Web应用的速度。 2. 避免同步代码 在Node.js中,同步…

    database 2023年5月22日
    00
  • Ruby on Rails框架程序连接MongoDB的教程

    下面是Ruby on Rails框架连接MongoDB的完整攻略。 1. 安装MongoDB驱动 在使用Ruby on Rails连接MongoDB之前,需要安装MongoDB驱动。可以通过以下命令在Gemfile中添加MongoDB驱动的依赖: gem ‘mongo’, ‘~> 2.12’ gem ‘bson’, ‘~> 4.12’ 然后运行b…

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