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); }