每日一题:SpringBoot中支持的事务类型
以下是每种事务类型的作用、代码示例和对代码的解释:
PROPAGATION_REQUIRED(默认):- 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则创建一个新的事务。适用于大多数业务场景,确保方法在事务中执行,如果没有事务,则创建一个新的事务。
- 代码示例:
@Transactional(propagation = Propagation.REQUIRED)
public void method1() {
// 事务逻辑
} @Transactional(propagation = Propagation.REQUIRED)
public void method2() {
// 事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_REQUIRED事务传播类型。如果当前存在事务,则这两个方法将在同一个事务中运行;如果当前不存在事务,则会创建一个新的事务。如果任一方法发生异常,则整个事务将回滚。
PROPAGATION_REQUIRES_NEW:- 作用:创建一个新的事务,并挂起当前事务(如果存在)。新事务将独立于当前事务运行。如果新事务失败,则回滚新事务,但不会影响当前事务。
- 代码示例:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void method1() {
// 事务逻辑
} @Transactional(propagation = Propagation.REQUIRES_NEW)
public void method2() {
// 事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_REQUIRES_NEW事务传播类型。每个方法都会创建一个新的事务,独立于当前事务的运行。如果任一方法发生异常,则该方法所在的事务将回滚,但不会影响其他事务。
PROPAGATION_SUPPORTS:- 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则以非事务的方式运行方法。适用于读取数据库的操作,不需要事务支持。
- 代码示例:
@Transactional(propagation = Propagation.SUPPORTS)
public void method1() {
// 事务逻辑
} @Transactional(propagation = Propagation.SUPPORTS)
public void method2() {
// 事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_SUPPORTS事务传播类型。如果当前存在事务,则这两个方法将在同一个事务中运行;如果当前不存在事务,则以非事务的方式运行。适用于不需要强制事务支持的操作。
PROPAGATION_NOT_SUPPORTED:- 作用:以非事务的方式运行方法。如果当前存在事务,则将其挂起。适用于不需要事务支持的操作,如查询。
- 代码示例:
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void method1() {
// 非事务逻辑
} @Transactional(propagation = Propagation.NOT_SUPPORTED)
public void method2() {
// 非事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_NOT_SUPPORTED事务传播类型。这两个方法将以非事务的方式运行,即使当前存在事务也会被挂起。适用于不需要事务支持的操作。
PROPAGATION_MANDATORY:- 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则抛出异常。适用于必须在事务中运行的操作。
- 代码示例:
@Transactional(propagation = Propagation.MANDATORY)
public void method1() {
// 事务逻辑
} @Transactional(propagation = Propagation.MANDATORY)
public void method2() {
// 事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_MANDATORY事务传播类型。如果当前存在事务,则这两个方法将在同一个事务中运行;如果当前不存在事务,则会抛出异常。适用于必须在事务中运行的操作。
PROPAGATION_NEVER:- 作用:以非事务的方式运行方法。如果当前存在事务,则抛出异常。适用于不允许在事务中运行的操作。
- 代码示例:
@Transactional(propagation = Propagation.NEVER)
public void method1() {
// 非事务逻辑
} @Transactional(propagation = Propagation.NEVER)
public void method2() {
// 非事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_NEVER事务传播类型。这两个方法将以非事务的方式运行,即使当前存在事务也会抛出异常。适用于不允许在事务中运行的操作。
PROPAGATION_NESTED:- 作用:如果当前存在事务,则在嵌套事务中运行;如果不存在事务,则创建一个新的事务。嵌套事务是独立于当前事务但又依赖于当前事务的事务。如果嵌套事务失败,则回滚嵌套事务和当前事务。
- 代码示例:
@Transactional(propagation = Propagation.NESTED)
public void method1() {
// 事务逻辑
} @Transactional(propagation = Propagation.NESTED)
public void method2() {
// 事务逻辑
}
- 解释:
method1和method2都使用了PROPAGATION_NESTED事务传播类型。如果当前存在事务,则这两个方法将在嵌套事务中运行。嵌套事务是独立于当前事务但又依赖于当前事务的事务。如果任一方法发生异常,则嵌套事务和当前事务都将回滚。
每日一题:SpringBoot中支持的事务类型的更多相关文章
- 【python】Leetcode每日一题-森林中的兔子
[python]Leetcode每日一题-森林中的兔子 [题目描述] 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers ...
- FMDB支持的事务类型
FMDB支持的事务类型 在数据库中,事务可以保证数据操作的完整性.当存在大量并发操作,容易出现死锁问题.在SQLite中,为了解决该问题,提供三种事务模式,分别为DEFFERED.IMMEDIAT ...
- jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?
1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自 ...
- [SpringBoot]SpringBoot中使用redis事务
本文基于SpringBoot 2.X 事务在关系型数据库的开发中经常用到,其实非关系型数据库,比如redis也有对事务的支持,本文主要探讨在SpringBoot中如何使用redis事务. 事务的相关介 ...
- [每日一题]ES6中为什么要使用Symbol?
关注「松宝写代码」,精选好文,每日面试题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目 ...
- SpringBoot 中的使用事务
转自:https://blog.csdn.net/linzhiqiang0316/article/details/52638039 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数 ...
- 面试突击82:SpringBoot 中如何操作事务?
在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现. 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法: 使用 Tr ...
- [每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- [每日一题]面试官问:谈谈你对ES6的proxy的理解?
[每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- LeetCode每日一题打卡组队监督!刷题群!
近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...
随机推荐
- 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!
可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件.工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东 ...
- NC23054 华华开始学信息学
题目链接 题目 题目描述 因为上次在月月面前丢人了,所以华华决定开始学信息学.十分钟后,他就开始学树状数组了.这是一道树状数组的入门题: 给定一个长度为 \(N\) 的序列 \(A\) ,所有元素初值 ...
- 超声波、毫米波、ToF激光雷达——在低功耗场景的应用选型
前言: 目前主要的测距方式有:光学测距,超声波和微波雷达测距. 光学测距又可以分为:双目,结构光,ToF.微波雷达,在消费类产品中,常见的是波长在毫米级别的毫米波雷达.超声波应用比较多的是在车载倒车雷 ...
- Android-图片压缩(二)-纯干货
Android - 图片压缩(一)- 项目中取图片转bitmap Android - 图片压缩(二)- 纯干货 前言:让我们手撸一个图片压缩库,对压缩工具鲁班进行升级改造. 在平常开发当中,我们一般是 ...
- 【解决方法】ASP.NET web 提示错误:CS0103 当前上下文中不存在名称“******”
问题描述 操作环境与场景: 在 Windows 10 中 Visual Studio 2017 编写网页时,提示报错: 错误 CS0103 当前上下文中不存在名称"******" ...
- selenium控制文件下载位置
selenium控制文件下载位置 我们在自动化下载文件的时候势必存在一种需求: 通过chrome将文件保存到指定位置 1. google窗口实现 配置'prefs'将文件下载到指定位置, 并通过判 ...
- 2020-11-20:java中,听说过CMS的并发预处理和并发可中断预处理吗?
福哥答案2020-11-20:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/391)1.首先,CMS是一个关注停顿时间,以回收停顿时间最短为目标的垃 ...
- 2021-05-05:一个数组中只有两种字符‘G‘和‘B‘,可以让所有的G都放在左侧,所有的B都放在右侧。或者可以让所有的G都放在右侧,所有的B都放在左侧。但是只能在相邻字符之间进行交换操作。返回至少
2021-05-05:一个数组中只有两种字符'G'和'B',可以让所有的G都放在左侧,所有的B都放在右侧.或者可以让所有的G都放在右侧,所有的B都放在左侧.但是只能在相邻字符之间进行交换操作.返回至少 ...
- 2021-05-04:给定一个非负整数c,你要判断是否存在两个整数a和b,使得a*a+b*b=c。【举例】c=5时,返回true。c=4时,返回true。c=3时,返回false。
2021-05-04:给定一个非负整数c,你要判断是否存在两个整数a和b,使得aa+bb=c.[举例]c=5时,返回true.c=4时,返回true.c=3时,返回false. 福大大 答案2021- ...
- 微软New Bing Chat AI聊天免费体验(需要魔法~)
必应聊天是什么? Bing Chat是一个AI 聊天机器人,它可以理解您问题的上下文并以人性化的方式回复.Microsoft 已将此功能直接集成到Bing 搜索中,使 Bing 成为搜索结果和AI 支 ...