外键导致的事务问题的解决方案

news2024/9/25 3:28:31

Exception分析

异常内容:

com.zaxxer.hikari.pool.ProxyConnection   : HikariPool-1 - Connection com.mysql.cj.jdbc.ConnectionImpl@192ef0c0 marked as broken because of SQLSTATE(08S01), ErrorCode(0)
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet successfully received from the server was 60,030 milliseconds ago. The last packet sent successfully to the server was 60,030 milliseconds ago.
    at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.29.jar:8.0.29]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) 

A微服务的方法伪代码如下:

    @Override
    @Transactional
    public Result handleA(String plantId) {
        Result<String> resultVO = new Result<>();
        //删除A表的数据。
        if (locationInt > 0) {
            //delete tableA where id = ?
            baseMapper.delete(plantId);
        }
        
        try {
            resultVO = feign.updateTableB(plantId);
        } catch (Exception e) {
            // 异常处理,可以抛出回滚或日志记录然后邮件通知运维处理
        } finally {
        }
        resultVO.setResult(ResultConstant.RETURN_SUCCESS);
        resultVO.setMsg("操作成功");
        return resultVO;
    }

B微服务的伪代码如下:

    @Override
    @Transactional
    public Result updateTableB(String plantId) {
        Result<String> resultVO = new Result<>();
        resultVO = baseMapper.updateTableB(plantId);
        resultVO.setResult(ResultConstant.RETURN_SUCCESS);
        resultVO.setMsg("操作成功");
        return resultVO;
    }

在A微服务执行了delete table2语句。然后通过feign远程调用B微服务,B微服务里面执行update table1语句update table1 set 字段1 = ? where ID = ?。微服务B的update语句报com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure异常。

刚开始时不清楚为什么在A微服务调用B微服务的时候,B微服务总是报这个异常。然后把A微服务的@Transactional事务删除,就发现B微服务正常了,没有出现异常。然后仔细分析mysql的事务

查看当前事务:

select * from information_schema.innodb_trx;

 查看事务等待:

select * from information_schema.INNODB_LOCK_WAITS;

 在这里408944835事务id是A方法的事务,408946024是B方法的事务,从事务来看,B方法一直在等待A方法的事务锁释放。由于A方法远程调用B方法,B方法还在等待A方法的锁释放,B方法无法获取锁,导致B方法的update语句无法执行,最终到B方法抛出CommunicationsException异常。

然后反复查看A方法和B方法,发现者两个方法并有没同时操作B表。在A方法里面只操作了A表,B方法里面只操作了B表,应该是不会导致B方法的事务等待A方法的事务释放。后来突然想到为了画ER图,在A方法加了外键指向B方法。这样就导致了A方法事务未释放,B方法事务无法获取锁,导致B方法等待连接超时,最终报CommunicationsException异常。

解决方案:把A表指向B表的外键删除即可。

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

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

相关文章

英雄大战恶棍 VoxEdit 大赛

准备好踏上超乎想像的史诗之旅了吗&#xff1f;号召所有的创作者、梦想家和有远见的人&#xff0c;在令人振奋的英雄大战恶棍 VoxEdit 大赛中展示他们的艺术才能&#xff01;准备好让你们最喜欢的英雄和卑鄙的恶棍以前所未有的方式变得栩栩如生吧&#xff01; 踏入 VoxEdit 的领…

win11中文家庭版下载补丁的方法远程连接

前置知识 参考链接&#xff1a;关于开启WINDOWS家庭版RDPwrap远程桌面报错解决办法&#xff08;如&#xff1a;not listening&#xff09; 0、怎么关闭Windows防火墙&#xff1f; 0、windows安全中心怎么关闭 正文 1、关闭防火墙 2、关闭windows安全中心 3、按照链接&…

【数据库】MySQL的主从复制模式

MySQL的主从复制模式包括异步复制&#xff0c;全同步复制&#xff0c;半同步复制。MySQL默认为异步模式。MySQL5.7引入了一种新的半同步方案&#xff0c;并且在5.7引入了一个新的参数&#xff0c;rpl_semi_sync_master_wait_point&#xff0c;这个参数有两种取值&#xff0c;1&…

Zookeeper:什么是Zookeeper? ①

一、Zookeeper是什么 Zookeeper是一个开源的分布式协调服务框架&#xff0c;它是一个为分布式应用提供一致性服务的软件。 Zookeeper致力于提供一个高性能、高可用&#xff0c;且具备严格的顺序访问控制能力的分布式协调服务&#xff0c;是雅虎公司创建&#xff0c;是G…

Linux更新Firefox 52后突然没声音了?

如果你是一名 Linux 用户&#xff0c;将 Firefox 浏览器升级到了最新的 v52&#xff0c;却发现浏览器不再能播放声音了&#xff0c;你不是唯一遇到这个问题&#xff08;http://www.omgubuntu.co.uk/2017/03/firefox-52-no-sound-pulseaudio-alsa-linux?_utm_source1-2-2&#…

产品的0到1怎么做的?(一)

要想做好产品&#xff0c;不是学一下Axure和墨刀就可以做产品了&#xff0c;那只是术的冰山一解&#xff0c;要想做好产品首先要从道、法、器三维度展开&#xff0c;下面从道方向展开&#xff0c;分想自己的一点心得&#xff1a;道可以道&#xff0c;非常道&#xff0c;产品的道…

NR PDCP(一) overview

这篇开始理下NR PDCP的内容&#xff0c;上图是38.300有关PDCP的服务和功能概括截图。PDCP功能包括对user plane或control plane data的传输&#xff1b;维护PDCP SN&#xff1b;使用ROHC和EHC协议进行header压缩和解压缩&#xff1b;加密(防止窃听)和解密&#xff1b;完整性保护…

2、Redis7 十大数据类型(一)

命令官网 英文版&#xff1a;https://redis.io/commands/ 中文版&#xff1a;http://redis.cn/commands.html/ 1.1 类型说明 1.2 Key命令 命令不区分大小写&#xff0c;但是key区分 命令 说明 keys * //展示当前库的所有key exists key //判断某…

解决Word编号与标签之间间隙过大的问题

前言 今天在写文档时发现&#xff0c;当给标题设置中文编号&#xff08;一、二、三…&#xff09;后&#xff0c;编号与文字之间会产生一个非常大的间隙&#xff0c;使用的字体是“思源黑体M”&#xff0c;更换其他字体后依然如此&#xff0c;很不美观&#xff08;如图所示&am…

(二十二)数据符号化——矢量数据符号化②

数据符号化——矢量数据符号化② 目录 数据符号化——矢量数据符号化② 3.统计符号设置4.组合符号设置 3.统计符号设置 在 ArcMap 中可以使用符号系统来设置和定制地图元素的样式、颜色和标注。其中&#xff0c;统计符号可以用于表示一个或多个统计值的分布情况和趋势。 这是…

数据结构第六章 图 6.1-6.3 错题整理

6.1 6.C 加上一个点实现非连通 去除每个边都是一颗不同的生成树 一共n条边 13.C n个顶点、e条边的无向图&#xff0c;森林。树的角度看&#xff0c;除了根节点没有一条边与其对应&#xff0c;其他顶点都对应一条边&#xff0c;用顶点-边得出有多少颗树 14.A II 等于 也可以…

Git 分布式版本控制

Git概述 Git是分布式版本控制系统&#xff0c;可以快速高效地处理各种项目。具有廉价的本地库&#xff0c;方便的暂存区和多个工作流分支等特性。 版本控制目的&#xff1a;个人开发过渡到团队协作 分布式版本控制系统的优点&#xff1a; 1、服务器断网的情况下也可以…

DELL戴尔笔记本电脑Dell G5 15 5587原厂Win10系统镜像,原装OEM预装专用系统,恢复出厂状态

dell戴尔笔记本电脑&#xff0c;Dell G5 15 5587原厂Windows10系统镜像,原装OEM预装专用系统,恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件等预装程序 链接&#xff1a;https://pan.baidu.com/s/1Av93lwhHR16SRGJAf__NAg?pwdkqkc 提取码&#xff1a;kq…

maven官网下载,中央仓库官网,搜索官网

maven 官网 https://maven.apache.org/ maven 下载 https://maven.apache.org/ maven 各版本下载 maven中央仓库 https://repo.maven.apache.org/maven2/ maven 搜索jar文件版本 https://mvnrepository.com/ 阿里镜像官网&#xff0c; https://developer.aliyun.com/mirro…

iPhone手机如何添加桌面便签软件小组件?

iPhone手机的小组件功能受到了很多用户的喜爱&#xff0c;它可以让用户更加快捷的查看到APP里面的部分相关内容。这项功能和便签软件结合起来之后&#xff0c;甚至能产生1加1大于二的效果。那么iPhone手机如何添加桌面便签软件小组件呢&#xff1f;以iPhone手机端敬业签桌面便签…

Day 56 kMeans 聚类

代码&#xff1a; package dl;import java.io.FileReader; import java.util.Arrays; import java.util.Random; import weka.core.Instances;/*** kMeans clustering.*/ public class kMeans {/*** Manhattan distance.*/public static final int MANHATTAN 0;/*** Euclidea…

react中基于腾讯地图的地图选点,地址搜索逆向定位获取经纬度

react中基于腾讯地图的地图选点&#xff0c;地址搜索逆向定位获取经纬度 效果示例图地图组件tencentMap/index.jsx样式map.scss 使用案例 效果示例图 地图组件tencentMap/index.jsx import { useEffect, useRef, useState } from "react"; import "./map.scss&…

PHP函数、数组和错误处理:简单实用的开发技巧和错误处理方法

目录 PHP函数 函数的基本概念&#xff1a; 函数定义语法&#xff1a; 函数命名关系&#xff1a; 参数详解 形参 实参 ​编辑 默认值 引用传递 函数体 函数返回值 作用域 静态变量 可变函数 匿名函数 基本概念 闭包 伪类型 库函数 有关输出的函数 有关时间…

Linux守护进程详解、范例演示 ( 6 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

gitee 上传、下载代码

gitee push 代码 四步走 $ git add . $ git commit -m "修改了什么东西&#xff0c;改了哪个bug&#xff0c;加了一条long服务" $ git remote add origin https://gitee.com/666666666666666666.git $ git push -u origin master1. 先安装git &#xff0c;自行百度 …