注解@Transactional的传播行为类型有哪些?

news/2024/7/25 21:54:59/文章来源:https://blog.csdn.net/m0_68948067/article/details/139262254

在Spring的@Transactional注解中,传播行为(Propagation Behavior)定义了业务方法对事务的处理方式。在Spring中,@Transactional注解支持以下类型的传播行为:

  1. REQUIRED(默认): 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常见的选择。

  2. SUPPORTS: 如果当前有事务,则加入事务;如果当前没有事务,则以非事务方式执行。

  3. MANDATORY: 如果当前已经存在事务,加入该事务;如果当前没有事务,则抛出异常。

  4. REQUIRES_NEW: 始终开启一个新的事务。如果当前存在事务,则将当前事务挂起。

  5. NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

  6. NEVER: 如果当前存在事务,则抛出异常。

  7. NESTED: 如果当前有事务,则在嵌套事务内执行。如果当前没有事务,则表现如REQUIRED。注意:嵌套事务需要支持保存点的事务管理器。

下面是一个示例代码,展示了如何在Spring中使用@Transactional注解来指定方法的事务传播行为:

import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;@Service
public class MyService {// 使用默认的REQUIRED传播行为@Transactionalpublic void performService() {// 业务逻辑}// 使用REQUIRES_NEW传播行为@Transactional(propagation = Propagation.REQUIRES_NEW)public void performIndependentService() {// 独立事务的业务逻辑}
}

在这个例子中,performService方法将以REQUIRED传播行为执行,这意味着它将在当前的事务中运行,或者如果没有事务,Spring将为它创建一个新事务。而performIndependentService方法则指定使用REQUIRES_NEW传播行为,它将总是在一个新的,独Independendependent的事务中运行,即使当前存在另一个事务。

选择正确的事务传播行为对于保证应用程序中的事务行为符合期望非常重要。不同的传播行为可以解决不同的业务场景,例如避免事务互相干扰,或者在某些操作中避免使用事务。

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

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

相关文章

Redhat9 LAMP安全配置方案及测试

目录 数据库主机 安装Mariadb数据库服务 设置mariadb开机自动启动 Php主机 部署Apache服务器 设置apache服务开机自启 安装php 安装 phpMyAdmin 打开测试机 更新软件包列表: 首先,确保你的软件包列表是最新的。打开终端并输入以下命令&#xf…

Vue.Draggable:强大的Vue拖放组件技术探索

一、引言 随着前端技术的不断发展,拖放(Drag-and-Drop)功能已经成为许多Web应用不可或缺的一部分。Vue.js作为现代前端框架的佼佼者,为开发者提供了丰富的生态系统和强大的工具链。Vue.Draggable作为基于Sortable.js的Vue拖放组件…

广东海上丝绸之路文化促进会正式批复荐世界酒中国菜的指导单位

广东海上丝绸之路文化促进会正式批复成为“世界酒中国菜”系列活动指导单位 近日,广东海上丝绸之路文化促进会近日正式批复荐酒师国际认证(广州)有限公司,成为备受瞩目的“世界酒中国菜”系列活动的指导单位。此举旨在通过双方的…

目标检测——水下物体检测数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

嵌入式进阶——OLED显示器(SPI)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 SPI协议原理图字库芯片中文显示屏原理API的使用 SPI协议 SPI(Serial Peripheral Interface)是一种同步串行…

java大学城水电管理系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的大学城水电管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 大学城水电管理系统的…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件,使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的,需要解析.vue文件,我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

常见排序算法之插入排序

目录 一、直接插入排序 1.1 什么是插入排序 1.2 代码思路 1.3 C语言源码 二、希尔排序 2.0 插入排序的弊端 2.1 什么是希尔排序? 2.2 排序思路 2.3 C语言源码 一、直接插入排序 1.1 什么是插入排序 插入排序是一种简单直观的排序算法,它通过构…

成都爱尔眼科蔡裕主任解说什么是近视性黄斑病变

近视性黄斑病变,属于黄斑病变的其中一种。 黄斑是眼内一个部位,它位于眼底的后极部,视网膜的中心部,管理着光、形、色。黄斑变性是指由于年龄、遗传、不良环境、慢性光损伤等各种因素的影响,使眼部视网膜处的黄斑发生…

Go 和 Delphi 定义可变参数函数的对比

使用可变参数函数具有灵活性、重用性、简化调用等优点,各个语言有各自定义可变参数函数的方法,也有通用的处理方法,比如使用数组、定义参数结构体、使用泛型等。 这里总结记录一下 go、delphi 的常用的定义可变参数函数的方式! 一…

【机器学习系列】使用高斯贝叶斯模型进行数据分类的完整流程

目录 一、导入数据 二、选择特征 三、十折交叉验证 四、划分训练集和测试集 五、训练高斯贝叶斯模型 六、预测测试集 七、查看训练集和测试集上的分数 八、查看混合矩阵 九、输出评估指标 一、导入数据 # 根据商户数据预测其是否续约案例 import pandas #读取数据到 da…

如何部署一套高可用性的医院信息管理系统?基于华为云、SpringBoot、Vue及Jenkins、Gitlab的CI/CD流程

目录 一、项目背景 二、项目架构 三、项目部署流程 1、前端部署 2、后端部署 3、监控与运维 四、项目过程 一、项目背景 随着医疗信息化程度的不断加深,医院信息管理系统的稳定性和可用性成为了医疗机构日常运营的关键。在这个数字化时代&am…

ChatGPT魔法,定制个性化提示词!

扮演Prompt创作者的角色 我想让你成为我的Prompt创作者。你的目标是帮助我创建最佳的Prompt,这个Prompt将由 你ChatGPT使用。 你将遵循以下过程: 1.首先,你会问我Prompt是关于什么的。我会告诉你,但我们需要通过不断的重复来改进…

一些关于深度聚类以及部分对比学习的论文阅读笔记

目录 资料SwAV问题方法方法的创新点为什么有效有什么可以借鉴的地方聚类Multi-crop 代码 PCL代码 Feature Alignment and Uniformity for Test Time Adaptation代码 SimSiam 资料 深度聚类算法研究综述(很赞,从聚类方法和深度学习方法两个方面进行了总结&#xff0…

Linux查看设备信息命令

dmidecode | grep Product Name 查看grub版本号:rpm -qa | grep -i "grub" 客户端操作系统版本: cat /etc/issue cat /etc/redhat-release 处理器品牌及型号: less /proc/cpuinfo |grep model

【Unity入门】认识Unity编辑器

Unity 是一个广泛应用于游戏开发的强大引擎,从 1.0 版本开始到现在,其编辑器的基本框架一直保持稳定。其基于组件架构的设计,使得界面使用起来直观且高效。为了更好地理解 Unity 的界面,我们可以将其比喻为搭建一个舞台。以下是对…

uni微信小程序input框过滤中文字节以及规定以外的符号

问题描述 需求是输入账号只能为手机号、邮箱、字母和数字组成的字符串,那么就是所有大小写字母、数字、以及符号 - _ . 四种。 条件限制 微信小程序无法直接通过type属性实现,type属性中没有专门为只允许英文字母的输入类型。详情见input | uni-ap…

【windows】Total Uninstall:一款功能强大的完全卸载软件

软件介绍 Total Uninstall是一款专业的软件卸载工具,旨在帮助用户彻底地清除计算机上的应用程序,包括与应用程序相关的所有文件和注册表项。以下是Total Uninstall的一些主要功能和特点: 完全卸载:软件可以监视应用程序的安装过程…

使用Django实现WebSocket

文章目录 安装依赖编写Consumer配置路由在模板中使用WebSocket运行应用 WebSocket是一种在单个TCP连接上进行全双工通信的协议,在Web开发中被广泛应用于实时通信和数据推送。本文将介绍如何在Django中使用WebSocket来实现实时通信功能。 安装依赖 首先&#xff0…

基于Java实现震中附近风景区预警可视化分析实践

目录 前言 一、空间数据说明 1、表结构信息展示 2、空间范围查询 二、Java后台开发实现 1、模型层设计与实现 2、控制层设计与实现 三、Leaflet地图开发 1、地震震中位置展示 2、百公里风景区列表展示 3、风景区列表展示 4、附近风景区展示 四、总结 前言 地震这类…