【Springboot入门- 事务】

基础理解

  • 基本概念
    • 事务:是一组原子性的数据库操作,要么全部成功,要么全部失败。
    • ACID:事务需要满足原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
  • 事务管理的两种方式
    • 编程式事务管理:通过编码的方式管理事务,使用 TransactionTemplate 或 PlatformTransactionManager。
    • 声明式事务管理:通过注解或 XML 配置来管理事务,更常见且易于使用。
  • 使用 @Transactional 注解
    在 Spring Boot 中,声明式事务管理通常是通过 @Transactional 注解来实现的。这个注解可以添加到类或方法上。
    • 添加到类上:类中的所有方法都会拥有相同的事务属性。
    • 添加到方法上:只有被注解的方法会使用指定的事务属性。
  • 配置事务属性
    @Transactional 注解支持多种属性,如:
    • propagation:事务的传播行为。
    • isolation:事务的隔离级别。
    • timeout:事务的超时时间。
    • readOnly:指定事务是否为只读。
    • rollbackFor:指定哪些异常会导致事务回滚。
    • noRollbackFor:指定哪些异常不会导致事务回滚。
  • 事务传播行为
    • REQUIRED:默认行为,如果存在事务,就加入事务;否则,创建一个新的事务。
    • REQUIRES_NEW:创建一个新的事务,如果存在事务,将当前事务挂起。
    • PROPAGATION_NOT_SUPPORTED:非事务的执行,如果存在事务,将抛出异常。
  • 隔离级别
    • READ_UNCOMMITTED
    • READ_COMMITTED
    • REPEATABLE_READ (mysql 默认)
    • SERIALIZABLE
  • 处理事务异常
    • 事务在遇到运行时异常时默认会回滚,但你可以自定义回滚规则。

事务失效的场景

  • 方法的可见性问题
    • 事务方法没有经过Spring代理对象,导致事务失效。
	@Servicepublic class MyService {@Transactionalpublic void myTransactionalMethod() {// 事务逻辑}public void myNonTransactionalMethod() {myTransactionalMethod(); // 直接调用,不走代理对象}
}
  • 自调用
    • 在同一个类中,一个方法内部调用了另一个带有 @Transactional 注解的方法,事务不会启动。
@Service
public class MyService {@Transactionalpublic void myTransactionalMethodA() {myTransactionalMethodB(); // 自调用,事务不会启动}@Transactionalpublic void myTransactionalMethodB() {// 事务逻辑}
}
  • 非代理对象调用
    • 通过非代理对象调用事务方法,事务不会生效。
@Service
public class MyService {@Transactionalpublic void myTransactionalMethod() {// 事务逻辑}
}// 某个地方的代码
MyService myService = new MyService();
myService.myTransactionalMethod(); // 直接创建对象调用,不走代理
  • 异常未被正确抛出
    • 事务方法内部抛出的异常没有被正确捕获和处理,导致事务没有回滚。
@Service
public class MyService {@Transactionalpublic void myTransactionalMethod() {// 事务逻辑if (true) {throw new RuntimeException("Error occurred");}}
}
  • 事务传播属性
    • 事务的传播行为设置不正确,导致事务失效。
@Service
public class MyService {@Transactional(propagation = Propagation.REQUIRES_NEW)public void myTransactionalMethodA() {myTransactionalMethodB();}public void myTransactionalMethodB() {// 非事务方法}
}
  • 数据库不支持事务
  • 多个事务管理器
    • 在有多个事务管理器的情况下,没有指定正确的事务管理器。
@Configuration
@EnableTransactionManagement
public class TransactionConfig {@Beanpublic PlatformTransactionManager txManager1() {return new DataSourceTransactionManager(dataSource1);}@Beanpublic PlatformTransactionManager txManager2() {return new DataSourceTransactionManager(dataSource2);}
}@Service
public class MyService {@Transactional(value = "txManager1", propagation = Propagation.REQUIRES_NEW)public void myTransactionalMethodA() {// 事务方法使用txManager1}
}
  • 异步方法
    • 在 @Transactional 方法中启动了新的线程执行任务,新线程中的任务不会继承原方法的事务上下文。
@Service
public class MyService {@Transactionalpublic void myTransactionalMethod() {new Thread(() -> {// 非事务代码}).start();}
}
  • 超时设置
    • 事务运行时间超过了设置的超时时间,导致事务被数据库自动回滚。
@Service
public class MyService {@Transactional(timeout = 1) // 超时时间设置为1秒public void myTransactionalMethod() {// 事务逻辑,如果执行时间超过1秒,事务可能会回滚}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

实时美颜功能技术揭秘:视频美颜SDK与API的技术剖析

当下,用户希望在视频直播中呈现出最佳状态,这推动了视频美颜SDK和API的迅速发展。本文将深入剖析这项技术的核心原理、应用场景以及未来趋势。 一、实时美颜技术的基本原理 在实现这些效果的过程中,视频美颜SDK通常会使用以下几种技术&…

Geekbench6使用指南:Linux系统性能测试,如此简单!

在当今计算机性能日益重要的时代,Geekbench 成为了测试 CPU 性能的热门工具。本文将带你深入了解如何使用 Geekbench,让你的电脑性能一目了然。 1. 什么是 Geekbench? Geekbench 是一款跨平台的基准测试工具,能够评估单核和多核…

Ubuntu Server 20.04 64bit定时备份MySQL8.0.36数据库数据

一、编写sh脚本 常见备份命令介绍 我选用的是mysqldump命令,命令使用简介 [root]> mysqldump -helpUsage: mysqldump [OPTIONS] database_name [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all…

字节软件测试岗二面:APP测试问题被虐哭了,直到看到这些知识点

APP测试一直是大厂软件测试问到的一个重点细节,下面我来给大家展示一下大厂关于APP测试经常会问到的一些问题,以及解析。想象一下当你遇到面试官问到你这些问题时,你是否也能够对答如流哦! 注意,注意啦!小编…

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击 近年来,随着深度学习模型在各个领域取得惊人突破,对抗攻击(Adversarial Attack) 逐渐成为研究热点。对抗攻击旨在通过在输入数据上施加精心设计的微小扰动&#x…

Meta号称替代程序员的LlamaCoder效果被CodeFlying秒杀,来看实测!

在讲LlamaCoder之前咱先浅聊一下Meta 这两天Meta凭借着Connect 2024大会可谓是风头正盛,刚刚发布的全新开源多模态大模型Llama3.2,热度是一路赶超咱的小草莓啊。 作为一款开源大模型能够和闭源的4o-mini、Claude3 Haiku打的有来有回, 甚至L…

32. Java栈和队列

1. 前言 栈和队列相关的题目是校招中出现频率一般,但是是属于相对基础的题型。我们要关注两类问题,栈和队列的添加和删除操作,以及栈和队列之间的区别和联系。 2. 栈和队列 2.1 数据结构 首先我们给出栈和队列的数据结构定义: (1)栈(Stack):允许在某一端插入元素(…

Ubuntu下Kafka安装及使用

Kafka是由Apache软件基金会开发的一个开源流处理平台,同时也是一个高吞吐量的分布式发布订阅消息系统。它由Scala和Java编写,具有多种特性和广泛的应用场景。 Kafka是一个分布式消息系统,它允许生产者(Producer)发布消…

CUDA error: no kernel image is available for execution on the device

记录一下出现上述问题的一个原因: pytorch所依赖的cuda版本不满足显卡(GPU)的算力要求! 举例来说,显卡是3090,并按照以下命令安装Pytorch: conda install pytorch1.7.0 torchvision0.8.0 torchaudio0.7.0 cudatoolkit10.1 -c p…

另外知识与网络总结

一、重谈NAT(工作在网络层) 为什么会有NAT 为了解决ipv4地址太少问题,到了公网的末端就会有运营商路由器来构建私网,在不同私网中私有IP可以重复,这就可以缓解IP地址太少问题,但是这就导致私有IP是重复的…

2024最新gewechat开发微信机器人教程说明

简介:本文将指导你如何搭建一个微信机器人,通过接入gewe框架实现智能回复与聊天功能。我们将从基础设置开始,逐步讲解如何配置机器人,并通过实例展示其实际应用。 随着人工智能技术的不断发展,智能机器人已经成为我们…

南沙csp-j/s一对一家教 解一本通题: 1937:【06NOIP普及组】数列

【题目描述】 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k3时,这个序列是: 1,3,4,9,10,12,13&a…

8,STM32CubeMX配置SPI工程(读取norflash的ID)

1,前言 单片机型号:STM32F407 编程环境 :STM32CubeMX Keil v5 硬件连接 :SPI1,CS/SS--->PB14 注:本工程在1,STM32CubeMX工程基础(配置Debug、时钟树)基础上完…

echarts饼图legend纵向分页

效果图 legend: {orient: vertical,type: scroll,bottom: 0,left: 10,icon: circle,height: 100, // 设置高度即可实现pageIconColor: #1b9aee, //翻页下一页的三角按钮颜色pageIconInactiveColor: #7f7f7f, //翻页(即翻页到头时)textStyle: {lineHei…

永辉超市自救三部曲:靠名创优品复制胖东来?如何避免另一个苏宁易购?

《港湾商业观察》施子夫 王璐 从潮流产品新锐向大型商超迈入,没有人想到名创优品(09896.HK;MNSO.US)会成为永辉超市(601933.SH)的第一大股东。 近63亿元的收购价让两家本就知名度颇高的企业在2024年的商业江湖中更加瞩目。然而…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试?三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? 🍎bug本意是 “…

TypeScript 设计模式之【状态模式】

文章目录 状态模式:优雅切换的交通信号灯状态模式的奥秘状态模式有什么利与弊?如何使用状态模式来优化你的系统代码实现案例状态模式的主要优点状态模式的主要缺点状态模式的适用场景总结 状态模式:优雅切换的交通信号灯 当你站在繁忙的十字路口&#…

Vatee万腾平台:企业智能化生态的领航者

在科技日新月异的今天,企业的智能化转型已成为不可逆转的趋势。Vatee万腾平台,凭借其前瞻性的技术视野和不懈的创新精神,正逐步构建起一个以智能化为核心的新型商业生态,成为推动企业智能化升级的核心力量。 Vatee万腾平台深谙技…

大数据毕业设计选题推荐-程序员招聘数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【中级通信工程师】终端与业务(六):市场环境与购买行为

【零基础3天通关中级通信工程师】 终端与业务(六):市场环境与购买行为 本文是中级通信工程师考试《终端与业务》科目第六章《市场环境与购买行为》的复习资料和真题汇总。本章的核心内容涵盖了通信市场环境、消费者市场的特点和动机、集团客户市场的采购过程等内容…