Spring事务未生效场景
一.抛出事务不支持的异常
原理:
Spring事务默认支持RuntimeException
异常,抛出的异常为RuntimeException异常及其子类异常事务均可生效,而我们日常常见的异常基本都继承自RuntimeException,所以无需指定异常类型事务也能生效。但若手动抛出Exception异常,而Exception是RuntimeException的父类,会导致事务不生效。
解决方案:
1.指定Spring事务异常捕获类型
@Transactional(rollbackFor = Exception.class)2.抛出Spring事务支持的异常类型
throw new RuntimeException("手动抛出运行时异常");
二.使用了try catch
原理:
异常被try catch块捕获,导致事务失效
解决方案:
在catch中抛出Spring事务支持的异常。
三.事务方法为私有方法
原理:
Spring声明式事务基于动态代理实现,private方法不能被代理,事务不会生效。
此外,static修饰的方法属于类,不属于任何对象,也不能被代理,事务不生效。
final修饰的方法无法重写,也就不能被代理,事务也不会生效。
解决方案:
方法用public修饰,不要用static、final修饰
四.类未被Spring管理
原理:
Spring实现对象的动态代理,首先这个对象要交由Spring管理。
解决方案:
将类交由Spring管理,可添加@Service注解,或使用其他能够注册成Spring Bean的注解或方法。
五.一个方法调用本类另一个方法,事务失效
原理:
@Transactional基于AOP实现,而AOP又是基于动态代理实现,直接调用本类方法或使用this调用本类方法,均不是Spring的代理对象,无法实现动态代理,事务也就不会生效。
解决方案:
1.将两个方法合并为一个方法,用@Transactional修饰。
2.将被调用的方法放到另一个被Spring管理的类中,用实例对象调用,
3.用@Autowired在本类中注入本类实例,再用注入的实例对象调用该方法。
4.手动获取本类的代理,用代理调用该方法((TestService)AopContext.currentProxy()).myTest();
六.数据表不支持事务
原理:
Spring事务基于数据库事务实现,有些数据表本身不支持事务,如MySql的MyISAM引擎,事务自然不生效。
解决方案:
将数据表改用支持事务的引擎,如MySql的InnoDB引擎。
七.Spring事务传播级别设置为不支持事务
原理:
@Transactional(propagation = Propagation.NOT_SUPPORTED) 不支持事务,若存在事务则挂起
@Transactional(propagation = Propagation.NEVER) 不使用事务,若存在事务则抛异常
解决方案:
使用Spring默认的传播级别(PROPAGATION_REQUIRED),或其他支持事务的传播级别。
八.未开启事务
解决方案:
@EnableTransactionManagement开启事务,Spring boot已自动装配,无需显示使用此注解。
九.多线程调用
原理:
不同线程使用不同的数据库链接,基于同一数据库连接的事务才能同时提交或回滚,因此事务不生效。
原文地址:https://blog.csdn.net/secretdaixin/article/details/127805326
相关文章:
Spring事务未生效场景
一.抛出事务不支持的异常 原理: Spring事务默认支持RuntimeException异常,抛出的异常为RuntimeException异常及其子类异常事务均可生效,而我们日常常见的异常基本都继承自RuntimeException,所以无需指定异常类型事务也能生效。但…...

servlet注解开发
文章目录servlet注解开发内容回顾响应对象 HttpServletResponse重定向与请求转发ServletConfig简介案例ServletContext简介案例Servlet 注解开发简介注解使用案例WebServlet 注解详细参数综合的增删改查案例登录注册功能servlet注解开发 内容回顾 响应对象 HttpServletRespon…...
mysql一联合主键
联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。 可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了&…...

openpnp - 判断吸嘴是否指定了正确的旋转轴
文章目录openpnp - 判断吸嘴座是否指定了正确的旋转轴概述笔记吸嘴单独矫正的时候Calibrate precise camera ↔ nozzle N1 offsets.ENDopenpnp - 判断吸嘴座是否指定了正确的旋转轴 概述 如果没有指定吸嘴座的正确旋转轴, 会因为对应吸嘴该旋转时不旋转, 而是另外一个空闲的吸…...

【办公类-19-03】办公中的思考——Python批量统一文件名的序号(保教主任整理打印文件)
背景需求:为迎接督导检查,保教主任从各条线收集文本资料。并在每个文件名称前手动编号。但是她嘀咕道:”为什么两套资料放在一个文件里就不是按照数字序号排序?,有的是1X-,有的是40X,看起来很乱…...

MySQL约束
约束约束总结约束 1、概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2、目的:保证数据库中数据的正确、有效性和完整性。 3、分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表…...

x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
文章目录[toc]关于 docker 版本查看是否开启 experimental 功能开启 experimental 功能查看当前环境平台拉取一个 arm 平台的容器运行一个 arm 平台的容器整一个 qemu-user-static注册可支持的架构解释器尝试启动 arm64 镜像尝试启动 ppc64le 镜像后台运行 arm64 容器build 一个…...
找工作经验分享
好的简历的特点:简洁:不要使用花里胡俏的简历模板,一般就是一行行写下来那种就行主次分明:一定要有重点,让面试了解你强项是什么首先当然是突出技术,不要花大批篇幅在个人信息、兴趣爱好等,重点…...

C语言学习之路--操作符篇,从知识到实战
目录一、前言二、操作符分类三、算术操作符四、移位操作符1、左移操作符2、右移操作符五、位操作符拓展1、不能创建临时变量(第三个变量),实现两个数的交换。2、编写代码实现:求一个整数存储在内存中的二进制中1的个数。六、赋值操…...
【华为OD机试2023】端口合并 C++ Java Python
【华为OD机试2023】端口合并 C++ Java Python 前言 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过率。 Tips1:机试为ACM 模式 你的代码需要处理输入输出,input/cin接收输入、…...
C++常用头文件整理
#include <iostream> 输入输出流,调用该函数使用cin,cout#include <iomanip> mainp是mainpular(操纵器)的缩写,可以调用一些函数,如fixed()<<setprecision()等#include <cmath> 调用数学函数#include &l…...
Linux内核4.14版本——drm框架分析(2)——connector分析
目录 1. drm_connector结构体 1.1 struct list_head head 1.2 struct drm_mode_object base 1.3 base.properties 1.4 uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER] 1.5 struct drm_encoder *encoder 1.6 struct list_head probed_modes 1.7 struct list_head mod…...
dev GridControl 按条件纵向合并单元格
dev GridControl 按条件纵向合并单元格 gridView5.OptionsView.AllowCellMerge true; gridView5.CellMerge gridView5_CellMerge; //自定义合并单元格监听事件void gridView5_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e){int rowHandle1…...

aws eks 集群初始化过程中pause容器的启动逻辑
eks集群默认策略在磁盘使用量达到threshold时会清除镜像,其中pause镜像也可能会被清除 https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-worker-nodes-image-cache/ pause容器能够为pod创建初始的名称空间,pod的内的容器共享其中的网络空…...

Numpy专栏目录(长期更新)
文章目录数组基础文件与字符串多项式分布Numpy绝对可以说是支撑Python地位的最重要的包了,几乎所有能叫出名的Python计算库,都不可避免地调用了Numpy,Numpy官网也列出了一些,大致如下图这样,堪称科学计算领域的瑞士军刀…...

English Learning - L2 第1次小组纠音 [ɑː] [ɔː] [uː] 2023.2.25 周六
English Learning - L2 第1次小组纠音 [ɑː] [ɔː] [uː] 2023.2.25 周六共性问题分析大后元音 [ɑː]大后元音 [ɔː]后元音 [uː]我的发音问题后元音 [uː]大后元音 [ɑː] 和 [ɔː]纠音过程第一次第二次第三次共性问题分析 大后元音 [ɑː] 嘴唇过于松散,没…...

博客系统程序(页面设计)
咱们学习javaEE的目的就是完成一个网站.在当前学习的基础上,已经可以完成我们的博客系统的页面的设计了!!!首先我们要进行统筹规划:首先我们的博客页面将会有4个页面:1.博客列表页2.博客详情页显示一个博客的具体内容:3.登录页就是用户输入用户名和页面的地方4.博客编辑页发布新…...
【死锁的排查工具有哪些?】
死锁是指两个或多个进程(线程)相互等待对方持有的资源,导致无法继续执行的情况。在并发编程中,死锁是一个常见的问题,需要使用专门的工具来进行排查和解决。 以下是常用的死锁排查工具: jstack:…...

JUC包:CyclicBarrier源码+实例讲解
1 缘起 上篇文章讲到了CountDownLatch:https://blog.csdn.net/Xin_101/article/details/129116170 作为同系的佼佼者,不得不提CyclicBarrier, 设计理念相似,都是多线程等待,但是,应用的技术以及功能不同&a…...

Trace、Metrics、Logging 选型
背景分布式追踪的起源自从微服务的兴起开始,整个系统架构开始变得极为庞大和复杂,但是服务之间的调用关系,调用消耗时间等等信息却依然是半黑盒的状态。为了能够将调用的链路进行串联,将系统的各种指标数据展示出来以使得系统的链…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...