【若依】定时任务问题:关闭了定时任务,但是依然在跑,且同一时刻跑了多条记录,为什么?

news2024/12/26 0:08:44

文章目录

  • 问题1
    • 描述:
    • 原因:
    • 办法:
  • 问题2
    • 描述:
    • 原因:
    • 办法:

问题1

描述:

定时任务关闭了, 但是服务器定时任务依然在跑

原因:

若依自带定时任务有缓存,且缓存是服务器内存,不是分布式缓存。

  • 单体项目:

    很可能是手动修改了数据库表中的定时任务开关,但是缓存没有关闭。

  • 集群项目:

    项目部署在多个节点上,且每个节点绑定的数据库表是同一张表;

    若依框架定时任务使用的调度器缓存是服务器内存,不是分布式缓存,所以在节点1 关闭定时任务,节点2查看的时候,展示的是关闭,但是实际上节点2内存中的开关缓存依然是开,所以结点2依然会跑。

办法:

刷新服务器内存中的缓存;

操作:

  • 单体项目:

    重新开启-再关闭;或者重新构建服务器部署;

  • 集群项目:(k8s项目部署多个节点)

    每个节点重新开启-再关闭;或者重新构建每个节点的服务器部署;

问题2

描述:

同一时刻,定时任务执行了多次;执行多次结果幂等(比如:单据本来就因为业务原因同步系统1失败,你再执行,它结果还是失败)

原因:

下面这段代码是定时任务调用的同步失败问题订单的服务方法:

    public void synSrmProblemOrderFail() throws Exception {
        String key = RedisKeyPre.inventorySrmProblem;
        RLock rLock = redissonClient.getLock(key);
        try {
            // 尝试加锁,最多等待3秒,上锁以后300秒自动解锁
            boolean res = rLock.tryLock(3, 300, TimeUnit.SECONDS);
            if (!res) {
                Log.info(LogBuilder.builder().business("同步SRM问题单,请等待锁释放").build());
                return;
            }
        } catch (InterruptedException e) {
            Log.error(LogBuilder.builder().business("同步SRM问题单获取锁异常" + e).build());
        }
        try {
            qmsAsyncTaskService.synSrmProblemOrderFail();
        } finally {
            releaseLock(rLock);
        }
    }

上面代码对应出现定时任务一个时刻时,执行多次场景(项目部署在多个节点):
image-20231012090415099

  • 注意:这里如果多个节点系统时间不一致时,考虑是否节点执行是否同频,以造成这个结果;

办法:

结合业务场景考虑:是否确保同一时刻只有一个结点在同步;

比如:类似发短信的定时任务,每天10点给客户发,结果你这个10点给客户发了多条,这就不行了;

不过,还有一种场景,就是同步失败单据,虽然结果会出现幂等(业务原因同步失败的单据,你同步多少次都是失败),但是对于网络原因失败的,可以每个节点都执行时,也可以考虑不处理;

  • 如果要确保同一时刻只有一个结点执行,需要优化代码

    image-20231012091715433

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

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

相关文章

布隆过滤器的优缺点及哈希切割问题

文章目录 1.布隆过滤器优点2.布隆过滤器缺陷3.哈希切割 1.布隆过滤器优点 增加和查询元素的时间复杂度为:O(K)(K为哈希函数的个数,一般较小),与数据量大小无关哈希函数相互之间没有关系,方便硬件并行运算布隆过滤器不需要存储元素本身&#…

Stable Diffusion XL搭建

本文参考:Stable Diffusion XL1.0正式发布了,赶紧来尝鲜吧-云海天教程 Stable Diffision最新模型SDXL 1.0使用全教程 - 知乎 1、SDXL与SD的区别 (1)分辨率得到了提升 原先使用SD生成图片,一般都是生成512*512&…

软件测试工程师简历项目经验怎么写?--1000个已成功入职的软件测试工程师简历范文模板(含真实简历)

一、前言:浅谈面试 ​ 面试是我们进入一个公司的门槛,通过了面试才能进入公司,你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试,得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里…

【牛客面试必刷TOP101】Day11.BM63 跳台阶和 BM67 不同路径的数目(一)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…

SpringSecurity + jwt + vue2 实现权限管理 , 前端Cookie.set() 设置jwt token无效问题(已解决)

问题描述 今天也是日常写程序的一天 , 还是那个熟悉的IDEA , 还是那个熟悉的Chrome浏览器 , 还是那个熟悉的网站 , 当我准备登录系统进行登录的时候 , 发现会直接重定向到登录页 , 后端也没有报错 , 前端也没有报错 , 于是我得脸上又多了一张痛苦面具 , 紧接着在前端疯狂debug…

WPF中prism模块化

1、参照(wpf中prism框架切换页面-CSDN博客)文中配置MainView和MainViewModel 2、模块其实就是引用类库,新建两个类库ModuleA ModuleB,修改输出类型为类库,并配置以下文件: ModuleA ModuleAProfile ModuleB Module…

用位运算实现加减乘除法

我们知道计算机只认识0和1,而计算机在计算加减乘除的是也不是我们理解的直接预算,而是通过逻辑运算来实现的,也就是与、非、或、异或,下面就通过这些逻辑运算符来实现加减乘除法 加法:比如11用二进制表示就是00000001…

什么是可持续发展的葡萄酒?

在过去的几年里,消费者越来越意识到他们的日常生活选择对我们的星球和周围环境的潜在影响。我们可以看到使用更少塑料、浪费更少水、食物里程更短的产品越来越受欢迎。这些需求如何转化为葡萄酒世界?这种产品通常要走1000英里才能到达你的杯子。 来自云…

写进简历的软件测试项目实战经验(包含电商、银行、app等)

前言: 今天给大家带来几个软件测试项目的实战总结及经验,适合想自学、转行或者面试的朋友,可以写进简历里的那种哦。 1、项目名称: 家电购 项目描述: “家电购”商城系统是基于 web 浏览器的电子商务系统,通过互联…

3、在docker 容器中安装tomcat

1、在服务器上查找tomcat镜像,查看前5条 docker search tomcat --limit 5​​​​​​​ 2、拉取镜像到本地 拉取官方的tomcat到本地 docker pull tomcat:9.0.34-jdk8 3、查看本地镜像 docker images |grep tomcat 4、启动tomcat 服务 使用默认配置 docker ru…

你不知道的测试小技巧——postman接口测试导入导出操作详解

postman中的集合脚本,环境变量、全局变量全部都可以导出,然后分享给团队成员,导出后的脚本可以通过newman生成测试报告。另外还可以将浏览器,抓包工具,接口文档(swagger)中的数据包导入到postman中,并且会自…

知识付费H5页面+后端+全功能制作源码系统

罗峰今天给大家要分享的是知识付费H5页面制作的源码系统,H5也是一种响应式界面,能自动兼容所有的打开设备屏幕,使得页面在不同尺寸的手机、平板等设备上打开时,界面也会自动兼容适应。这也是大部分用户选择H5页面的原因&#xff0…

centos7下 编译coreboot生成真机可用的bios固件, 并在真机上演示 (下篇)

本文章应该是全网最详细的了, 真机版的coreboot bios固件演示了, 希望对你有帮助 centos7下 编译coreboot生成真机可用的bios固件, 并在真机上演示 (上篇)-CSDN博客 文章为上下两大篇 上篇: 文章主要是 一些东西和资料以及步骤 并 编译出可以用于真机的 bios固件 coreboot.r…

漏电断路器

漏电断路器又名漏保。 一、漏电断路器的作用 1、具有空气开关的功能,三相空气开关对任意一相出现过载或短路,均会跳闸。 2、漏电时,L1和L3进线端子之间有220V的电压差,分励脱钩器就可以工作,引起跳闸。 注意&#…

idea 打包 java 项目 报错类似 No valid Maven installation found - 在maven打包前,修改打包名(jar包)

目录 一、idea 打包 java 项目 报错类似 No valid Maven installation found二、在maven打包前,修改打包名参考链接 一、idea 打包 java 项目 报错类似 No valid Maven installation found 解决措施:一定要能看到maven的版本才行,配置到盖层…

剑指offer(C++)-JZ66:构建乘积数组(算法-其他)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个数组 A[0,1,...,n-1] ,请构建一个数组 B[0,1,...,n-1] ,其中 B 的元素 B[i]A[0]*A[1]*...*A[i-1]…

C# +.Net C/S架构,在二甲医院全面实际使用三年的LIS系统源码

LIS系统源码技术细节: 体系结构:Client/Server架构 SaaS模式 客户端:WPFWindows Forms 服务端:C# .Net 数据库:Oracle 接口技术:RESTful API HttpWCF LIS检验系统一种专门用于医院化验室的计算机…

发稿渠道和发布新闻的步骤和技巧,收藏!

在现代社会中,新闻的发布和传播起着至关重要的作用。通过新闻,人们可以获取及时的信息,了解社会动态和事件发展。而对于企业和组织来说,通过新闻发布可以宣传品牌、推广产品,增加曝光度,吸引目标受众的关注…

【个人博客公网访问】使用Cpolar+Emlog在Ubuntu上轻松搭建个人博客公网访问

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

空开和浪涌保护器的关系及其行业应用解决方案

空开和浪涌保护器是两种常见的电气保护设备,它们各自有不同的工作原理、保护作用和保护范围,但在实际应用中,它们往往需要配合使用,以实现对电气设备和线路的全面保护。本文将介绍空开和浪涌保护器的基本概念、区别和联系&#xf…