From 3521172a478859b600d659eb2b3fc4f7f69e74f2 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 25 Oct 2025 02:50:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E5=BA=A6=E4=B8=8D=E9=87=8D=E4=B8=8D?= =?UTF-8?q?=E6=BC=8F=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=EF=BC=9A=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E6=97=B6=E9=97=B4=E8=BD=AE=E5=8D=95=E5=88=BB=E5=BA=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8E=BB=E9=87=8D=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E6=9E=81=E7=AB=AF=E6=83=85=E5=86=B5=E4=B8=8B=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=89=A7=E8=A1=8C=EF=BC=9B=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=BD=AE=E8=BD=AC=E5=8A=A8=E6=97=B6=E6=A0=A1=E9=AA=8C=E4=B8=B4?= =?UTF-8?q?=E8=BF=91=E5=88=BB=E5=BA=A6=EF=BC=8C=E9=81=BF=E5=85=8D=E6=9E=81?= =?UTF-8?q?=E7=AB=AF=E6=83=85=E5=86=B5=E4=B8=8B=E9=81=97=E6=BC=8F=E5=88=BB?= =?UTF-8?q?=E5=BA=A6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 2 +- .../xxl/job/admin/scheduler/thread/JobScheduleHelper.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 1534718b..82ff7209 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2578,7 +2578,7 @@ public void execute() { - 6、【优化】任务调度中心调度锁逻辑优化,事务SQL下沉至Mapper层统一管理,并增加测试用例,提升代码可读性以及可维护性; - 7、【优化】调度组件日志完善,提升边界情况下问题定位效率; - 8、【修复】调度预读任务数量调整,改为调度线程池大小x10,降低事务颗粒度,提升性能及稳定性; -- 9、【优化】调度时间轮单刻度数据去重,避免极端情况下任务重复执行; +- 9、【优化】调度不重不漏逻辑优化:调度时间轮单刻度数据去重,避免极端情况下任务重复执行;时间轮转动时校验临近刻度,避免极端情况下遗漏刻度; - 7、【ING】UI框架重构升级,提升交互体验; - 8、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java index f166e09f..08a3ed3d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java @@ -199,12 +199,12 @@ public class JobScheduleHelper { List ringItemData = new ArrayList<>(); // collect rind data, by second - int nowSecond = Calendar.getInstance().get(Calendar.SECOND); // 避免处理耗时太长,跨过刻度,向前校验一个刻度; - for (int i = 0; i < 2; i++) { + int nowSecond = Calendar.getInstance().get(Calendar.SECOND); + for (int i = 0; i <= 2; i++) { // 避免调度遗漏:处理耗时太长、跨过刻度,除当前刻度外 + 向前校验2个刻度; List ringItemList = ringData.remove( (nowSecond+60-i)%60 ); if (CollectionTool.isNotEmpty(ringItemList)) { // distinct for each second - List ringItemListDistinct = ringItemList.stream().distinct().toList(); + List ringItemListDistinct = ringItemList.stream().distinct().toList(); // 避免调度重复:重复推送时间轮刻度,去重只保留一个;; if (ringItemListDistinct.size() < ringItemList.size()) { logger.warn(">>>>>>>>>>> xxl-job, time-ring found job repeat beat : " + nowSecond + " = " + ringItemData); }