事务异常:Transaction rolled back because it has been marked as rollback-only解决方案

news2025/1/15 22:45:25

目录

    • 事务的概念
    • 为何需要事务
    • 事务异常的原因
    • 解决方案
      • 1、方案1(一般采用这种)
      • 2、方案2

事务的概念

事务这个词,其实我们最先接触的地方应该是数据库,我们会知道事务有着四种特性,分别是:

  • 原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
  • 一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
  • 隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
  • 持久性:表示已提交的数据在事务执行失败时,数据的状态都应该正确。

说白了,事务也就是一组sql的指令,每个sql都是事务的一部分
假设每条sql都执行完成并且成功了,那就说明这组sql执行生效了,虽然执行了事务,但是并不影响原来sql的执行;反之如果出现了错误,那就需要事务启动了,事务会将之前的sql进行一一回滚,这条事务也就结束了,原先的sql等于都没有执行,这一组的事务执行失败

为何需要事务

体现到java中来也是一样,我们的程序有时候会不止一次的影响数据库,而如果中间有一次sql执行失败,而前面的sql已经执行,那前面的数据已经创建或者修改了,而另外一条或者多条数据依然没有发生变化,这肯定不符合正常的逻辑:哪怕报错了也不能影响其他的业务!

就像是沃兹基曾经说过:全荣才荣,一损俱损,只要有一处地方产生了错误,这一整个物件就等于坏了,雪崩的时候没有一片雪花是无辜的

而事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问

事务异常的原因

例如我们这边来看一下这个事务异常出现的原因,首先来看一下代码:
在这里插入图片描述
很好!一个大事务里面套了一个小事务,然后又用try-catch捕获小事务,导致连错误的提示都没有了,内层事务在一定场景下抛出了异常,但是却被外层事务用try–catch接住了。于是在内层事务异常的情况下,外层事务继续执行了。

如果只是没有异常提示倒还说,我们一步一步debug也能找到出错的原因,但是如果两个事务关联到了相同的表或者数据,那就容易产生一个更大的问题:lock wait timeout exceeded; try restarting transaction,也就是死锁问题,两个事务共同争取同一个资源,导致循环等待,这个问题有时间再细讲

解决方案

1、方案1(一般采用这种)

如果在确定里层方法不需要使用事务注解的话,把里层的@Transactional注解去了,因为外层本身就有事务注解,不会因为里层的方法体写到另外一个地方就不会执行事务

2、方案2

如果在确定外层事务不会修改数据库的话(例如查询),就可以去除外部的@Transactional

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

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

相关文章

windows11 修改默认存储位置

windows11 修改默认存储位置 https://zhuanlan.zhihu.com/p/367637690

SCS【31】减少障碍,加速单细胞研究数据库(Single Cell PORTAL)

细胞生信分析教程 桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程,目前整理出来的相关教程目录如下: Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅,述说…

SElinux 导致 Keepalived 检测脚本无法执行

哈喽大家好,我是咸鱼 今天我们来看一个关于 Keepalived 检测脚本无法执行的问题 一位粉丝后台私信我,说他部署的 keepalived 集群 vrrp_script 模块中的脚本执行失败了,但是手动执行这个脚本却没有任何问题 这个问题也是咸鱼第一次遇到&…

koa2脚手架koa-generator的使用

koa2脚手架的基本使用 简介前言:使用koa2的脚手架koa-generator,使用非常简单,容易上手 首先,我们需要全局安装 npm install -g koa-generator安装成功后,需要创建项目 koa2 koapro[koapro 项目名称] 或者 koa2 -e [koapro 项目名…

华为网络篇 RIP路由手工汇总-27

难度2复杂度2 目录 一、实验原理 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 在网络规划过程中,我们避免不了使用VLSM技术,但是使用VLSM后会有一个问题,就是子网较多时会占用系统资源。我们可以使用路由汇总的方法&…

Doris Summit 2023 正式启航,议题征集 合作伙伴招募火热进行中

在数字化进程不断演进的时代,数据呈现爆发增长。在这数据洪流之中,数据实时分析的重要性愈发凸显,并成为企业成功的关键要素。 作为专注于实时分析的开源实时数据仓库 Apache Doris,从开源至今已走过 6 个年头,这些年…

学习笔记十九:Pod常见的状态和重启策略

Pod常见的状态和重启策略 常见的pod状态第一阶段:第二阶段:扩展: pod重启策略测试Always重启策略正常停止容器内的tomcat服务非正常停止容器里的tomcat服务 测试never重启策略正常停止容器里的tomcat服务非正常停止容器里的tomcat服务 测试On…

配置 NTP

server host.domain8.rhce.cc iburst配置 NTP 配置 node1 作为 NTP 的客户端,跟时间服务器 host.domain8.rhce.cc 同步时间。 yum install chrony 安装chrony软件包 systemctl status chronyd 查看chronyd服务是否开启,没有开启使用一下任何一条…

【mysql】事务的四种特性的理解

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

Codeforces Round 893 (Div. 2)

A.首先题目意思就是看谁拥有的按钮多&#xff0c;所以优先按c的按钮&#xff0c;按两次c等于没按&#xff0c;所以最后看c的奇偶&#xff0c;奇数代表第一个人能多拥有一个&#xff0c;最后判断第一个人和第二个人拥有的总数即可 #include<bits/stdc.h> using namespace…

【Ubuntu】简洁高效企业级日志平台后起之秀Graylog

简介 Graylog 是一个用于集中式日志管理的开源平台。在现代数据驱动的环境中&#xff0c;我们需要处理来自各种设备、应用程序和操作系统的大量数据。Graylog提供了一种方法来聚合、组织和理解所有这些数据。它的核心功能包括流式标记、实时搜索、仪表板可视化、告警触发、内容…

spring(1)

文章目录 IOC容器IOC容器和beans的介绍实例化 BeanBeanFactory&#xff1a;ApplicationContext 容器概述配置元数据实例化容器组合基于xml的配置元数据使用容器 bean的概述命名bean别名的使用 实例化bean构造函数实例化静态工厂实例化实例工厂方法bean 在运行时的实际类型 依赖…

Microsoft Learn AI 技能挑战赛|开启你的 Azure OpenAI Service 应用

点击蓝字 关注我们 Microsoft Learn AI 技能挑战赛已经结束&#xff0c;完赛的小伙伴请保存完赛截图并登记奖品领取表单&#xff01;此外&#xff0c;挑战赛作品提交将截止到8月18日&#xff0c;优秀作品将获得惊喜礼包奖励。 奖品领取、作品提交等详情请查看&#xff1a; 活动…

Docker入门——实战图像分类

一、背景 思考&#xff1a; 在一个项目的部署阶段&#xff0c;往往需要部署到云服务器或者是终端设备上&#xff0c;而环境的搭建往往是最费时间和精力的&#xff0c;特别是需要保证运行环境一致性&#xff0c;有什么办法可以批量部署相同环境呢&#xff1f; Docker本质——…

揭秘热门工作秘籍:ChatGPT大显身手!轻松提升工作效率的高效Prompt技巧曝光!

目录 01 背景 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 02 AI 可以帮助程序员做什么&#xff1f; 2.1 技术知识总结 2.2 拆解任务 2.3 阅读代码/优化代码 2.4 代码生成 2.5 生成单测 2.6 更多 AI 应用/插件 AIPRM Voice Control for Ch…

改善神经网络——优化算法(mini-batch、动量梯度下降法、Adam优化算法)

改善神经网络——优化算法 梯度下降Mini-batch 梯度下降&#xff08;Mini-batch Gradient Descent&#xff09;指数加权平均包含动量的梯度下降RMSprop算法Adam算法 优化算法可以使神经网络运行的更快&#xff0c;机器学习的应用是一个高度依赖经验的过程&#xff0c;伴随着大量…

SUMO 充电站与电动车详解

官方文档参考&#xff1a;Electric 创建电动车 首先在rou.xml文件中定义一个电动车类型&#xff0c;例如&#xff1a; <vType id"EV" length"5.00" minGap"2.50" maxSpeed"70.00" color"white" accel"1.0" …

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~2.环境验证(亲测有效)

保姆级教程&#xff0c;看这一篇就够用了。 在翻阅了网络上很多资料后&#xff0c;发现很多版本的信息比匹配。 花了一周的时间配置环境&#xff0c;以及环境验证&#xff0c;然后写了这篇长文。 有过程&#xff0c;有代码&#xff0c;有经验&#xff0c;欢迎大家批评指正。 一…

Linux 操作文件的系统调用

一、系统调用 系统调用表现出来的形式和库函数看着是一样的&#xff0c;但是系统调用的实现是在内核中&#xff0c;一旦执行系统调用以后&#xff0c;会产生中断&#xff0c;陷入内核&#xff0c;内核去执行相应的代码。我们无法直接去执行内核的代码&#xff0c;系统调用执行…

烧烤炉跨境电商UL检测报告UL 2728A标准

烧烤炉是一种烧烤设备&#xff0c;可以用来做烤羊肉串、烤肉、烤蔬菜等烧烤食品。烧烤炉根据加热源的不同可以分为木炭烧烤炉、燃气烧烤炉和电热烧烤炉&#xff1b;根据烧烤形式的不同&#xff0c;可分为手动烧烤炉和自动烧烤炉&#xff1b;根据用途的不同&#xff0c;可分为家…