spring框架的事务传播级别经典篇

一 spring事务传播级别

1.1 总结概述

方法A:外围方法,方法B:内部方法,在A中调用B
1.事务级别PROPAGATION_REQUIRED:
如果A为PROPAGATION_REQUIRED:B 不管有没有设置事务级别,都会加入到A的事务级别中。如果执行B的时候出异常,那么不仅B方法里执行的会被回滚,A也会全回滚。所有Propagation.REQUIRED修饰的内部方法和外围方法均属于同一事务,只要一个方法回滚,整个事务均回滚
如果A没有设置事务级别,Propagation.REQUIRED修饰的内部方法B会新开启自己的事务,且开启的事务相互独立,互不干扰。
2.事务级别PROPAGATION_support:
如果A为PROPAGATION_REQUIRED:B 不管有没有设置事务级别,都会加入到A的事务级别中。如果执行B的时候出异常,那么不仅B方法里执行的会被回滚,A也会全回滚。所有Propagation.REQUIRED修饰的内部方法和外围方法均属于同一事务,只要一个方法回滚,整个事务均回滚
如果A没有设置事务级别,Propagation.support修饰的内部方法B,就不开启新的事务,会以非事务方式运行。
3.事务级别PROPAGATION_MANDATORY(强制传播):
如果A为PROPAGATION_REQUIRED:B 不管有没有设置事务级别,都会加入到A的事务级别中。如果执行B的时候出异常,那么不仅B方法里执行的会被回滚,A也会全回滚。所有Propagation.REQUIRED修饰的内部方法和外围方法均属于同一事务,只要一个方法回滚,整个事务均回滚
如果A没有设置事务级别,Propagation.MANDATORY修饰的内部方法B,就抛出异常,即必须在事务的环境下运行。
4.事务级别PROPAGATION_REQUIRED_NEW:
如果A为PROPAGATION_REQUIRED:B不管有没有设置事务级别PROPAGATION_REQUIRED_NEW,都会新开启自己的事务,和方法A的事务,相互独立,互不干扰。各自玩各自的。
5.事务级别PROPAGATION_NOT_SUPPORTED:
如果A为PROPAGATION_REQUIRED:B 设置事务级别PROPAGATION_NOT_SUPPORTED,B会以非事务的方式执行,B执行完后,再以事务的方式执行剩余逻辑,
此时不管B是成功还是失败,对A都不造成影响。此时如果A出现异常,对B也不会造成影响,只会回滚A里的其他的执行。如果是单独执行B方法,直接会以非事务的方式执行。
6.事务级别PROPAGATION_never
如果A为PROPAGATION_REQUIRED:B 有设置事务级别PROPAGATION_never,A调用B 则报异常
如果A没有设置事务级别,B 有设置事务级别PROPAGATION_never,则B以非事务方式运行。
7.事务级别PROPAGATION_nested
如果A为PROPAGATION_REQUIRED:B 有设置事务级别PROPAGATION_nested,外围主事务A回滚,子事务B一定回滚,而内部子事务B可以单独回滚而不影响外围主事务A和其他子事务(需要 catch进去,后边有例子)
如果A没有设置事务级别,B 有设置事务级别PROPAGATION_nested,则Propagation.NESTED和Propagation.REQUIRED作用相同,修饰的内部方法B都会新开启自己的事务,且开启的事务相互独立,互不干扰。

https://www.cnblogs.com/sjj123/p/16677875.html

【spring】spring 的事务(transaction) 四 嵌套事务PROPAGATION_NESTED_云川之下的博客-CSDN博客

【Spring】彻底搞明白事物的传播级别_事务传播级别-CSDN博客

1.2 PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别

PROPAGATION_REQUIRES_NEW内层事务执行完就立即提交。

PROPAGATION_NESTED 子事务执行完,不会立即提交,而是等待外层事务完成后一起提交。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【驱动】串口驱动分析(四)-串口编程和调试方法

串口调试 串口调试主要有 根据/proc系统信息确认串口状态,stty命令,编程调试 三种调试方法,下面我们分别具体介绍下。 根据设备节点确认串口是否正常 系统上电时,默认会使能串口,我们可以通过dmesg | grep ttyS 查看…

SSM6 11-27 SpringMvc过滤器和异常处理

try catch:处理异常 throw/throws:不处理 抛出 jvm中断程序运行 打印错误信息 web:经典三层模型: dao(mapper) service web层 异常抛给web层Controller类的方法,每个方法可能处理异常,可能处理异常代码相似,造成重复代码重复编写 web层再往上抛 …

【驱动】串口驱动分析(二)-tty core

前言 tty这个名称源于电传打字节的简称,在linux表示各种终端,终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标,输出设备显示器的控制终端和串口终端。也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么…

Flutter使用flutter_gen管理资源文件

pub地址: https://pub.dev/packages/flutter_gen 1.添加依赖 在你的pubspec.yaml文件中添加flutter_gen作为开发依赖 dependencies:build_runner:flutter_gen_runner: 2.配置pubspec.yaml 在pubspec.yaml文件中,配置flutter_gen的参数。指定输出路…

《C++ Primer》第10章 算法(二)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 10.4 再探迭代器(P357) 除了为每个容器定义的迭代器外,头文件 iterator 中还定义了额外的几种迭代器: 插入迭代器(insert iterator)&…

Selenium 连接到现有的 Google Chrome 示例

python 3.7 selenium 3.14.1 urllib3 1.26.8 Google Chrome 119.0.6045.160 (64位) chromedriver.exe 119.0.6045.105(win32) 1 Google Chrome 添加参数 "--remote-debugging-port9222" 2 测试效果(chromedriver.exe 要和 Google Chrome 版本…

vue3 router-view 使用keep-alive报错parentcomponent.ctx.deactivate is not a function

问题 如下图,在component组件上添加v-if判断,会报错: parentcomponent.ctx.deactivate is not a function 解决方法 去除v-if,将key直接添加上。由于有的公用页面,需要刷新,不希望缓存,所以需要添加key…

分支和循环

通常来说,C语言是结构化的程序设计语言,这里的结构包括顺序结构、选择结构、循环结构,C语言能够实现这三种结构,如果我们仔细分析,我们日常生活中所见的事情都可以拆分为这三种结构或者它们的组合。 下面我会仔细讲解我…

【人工智能Ⅰ】实验4:贝叶斯分类

实验4 贝叶斯分类 一、实验目的 1. 了解并学习机器学习相关库的使用。 2. 熟悉贝叶斯分类原理和方法,并对MNIST数据集进行分类。 二、实验内容 1. 使用贝叶斯方法对mnist或mnist variation数据集进行分类,并计算准确率。数据集从网上下载&#xff0…

vue.js ——Vuex

基本概念 vue进行开发过程中有没有遇到这样一种场景,就是有些时候一些数据是一种通用的共享数据(比如登录信息),那么这类数据在各个组件模块中可能都会用到,如果每个组件中都去后台重新获取那么势必会造成性能浪费&am…

websocket 消息包粗解

最近在搞websocket解析,记录一下: 原始字符串 �~�{"t":"d","d":{"b":{"p":"comds/comdssqmosm7k","d":{"comdss":{"cmdn":"success",…

免费使用GPT的网站

登录ChatGPT系统 登录ChatGPT系统 登录ChatGPT系统

ArkTs变量类型、数据类型基础语法

可以参考官网学习路径学习HarmonyOS第一课|应用开发视频教程学习|HarmonyOS应用开发官网 ArkTS是华为自研的开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以…

浅谈安科瑞ASJ继电器在菲律宾矿厂的应用

摘要:对电气线路进行接地故障保护,方式接地故障电流引起的设备和电气火灾事故越来越成为日常所需。针对用户侧主要的用能节点,设计安装剩余电流继电器,实时监控各用能回路的剩余电流状态。通过实时监控用能以及相关电力参数、提高…

ESP32-Web-Server编程- 通过 Highcharts 创建图表(Chart)实时显示设备信息

ESP32-Web-Server编程- 通过 Highcharts 创建图表(Chart)实时显示设备信息 概述 上节讲述了通过 Server-Sent Events(以下简称 SSE) 实现在网页实时更新 ESP32 Web 服务器的传感器数据,并通过表格显示传感器的数据。…

操作系统--中断异常

操作系统第一章易错总结 1.操作系统的功能 ⭐ 编译器是操作系统的上层软件,不是操作系统需要提供的功能。 ⭐注意: 1.批处理的主要缺点是缺乏交互性 2.输入/输出指令需要中断操作,中断必须在核心态下执行 3.多道性是为了提高系统利用率和…

【Spring MVC】Filter 过滤器异常处理 HandlerExceptionResolver 分析

文章目录 前言版本说明测试 Demo1、自定义过滤器 DemoFilter2、自定义业务异常 ServiceException3、自定义异常处理类 DemoExceptionHandler4、DemoController5、请求测试 问题分析1、日志打印记录2、Debug 方法 解决方案1、修改自定义过滤器2、请求测试 解决方案分析1、日志打…

提升技能素养,AMCAP做出合适的决策

近年来,智能配置投资与理财逐渐受到关注并走俏。这是一种简单快捷的智慧化理财方式,通过将个人和家族的闲置资金投入到低风险高流动性的产品中。 国际财富管理投资机构AMCAP集团金融分析师表示:智能配置投资与理财之所以持续走俏&#xff0c…

6.3 Windows驱动开发:内核枚举IoTimer定时器

内核I/O定时器(Kernel I/O Timer)是Windows内核中的一个对象,它允许内核或驱动程序设置一个定时器,以便在指定的时间间隔内调用一个回调函数。通常,内核I/O定时器用于周期性地执行某个任务,例如检查驱动程序…

在Linux上安装KVM虚拟机

一、搭建KVM环境 KVM(Kernel-based Virtual Machine)是一个基于内核的系统虚拟化模块,从Linux内核版本2.6.20开始,各大Linux发行版就已经将其集成于发行版中。KVM与Xen等虚拟化相比,需要硬件支持的完全虚拟化。KVM由内…