From 61bb60369ae00c7c65fb52431d850b23560ac210 Mon Sep 17 00:00:00 2001
From: xuxueli <931591021@qq.com>
Date: Sun, 29 Mar 2026 16:21:31 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E5=BA=A6=E6=80=A7=E8=83=BD=E6=8F=90?=
=?UTF-8?q?=E5=8D=87=EF=BC=9A=E4=BB=BB=E5=8A=A1=E8=A7=A6=E5=8F=91=E5=90=8E?=
=?UTF-8?q?=E5=88=86=E6=89=B9=E6=89=B9=E9=87=8F=E6=9B=B4=E6=96=B0=EF=BC=8C?=
=?UTF-8?q?=E6=8F=90=E5=8D=87=E8=B0=83=E5=BA=A6=E6=80=A7=E8=83=BD=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
doc/XXL-JOB官方文档.md | 16 +++++------
pom.xml | 20 ++++++-------
.../job/admin/mapper/XxlJobInfoMapper.java | 7 +++++
.../scheduler/thread/JobScheduleHelper.java | 10 +++++--
.../resources/mapper/XxlJobInfoMapper.xml | 21 ++++++++------
.../admin/mapper/XxlJobInfoMapperTest.java | 28 +++++++++++++++++++
6 files changed, 74 insertions(+), 28 deletions(-)
diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md
index 99ca1050..4b59fc83 100644
--- a/doc/XXL-JOB官方文档.md
+++ b/doc/XXL-JOB官方文档.md
@@ -2785,10 +2785,11 @@ public void execute() {
- 10、【优化】统一项目依赖管理结构,依赖版本统一到父级pom提升可维护性;
### 7.44 版本 v3.4.0 Release Notes[ING]
-- 1、【优化】父POM依赖配置优化,移除容易配置;合并PR-3926;
+- 1、【优化】调度性能提升:任务触发后分批批量更新,提升调度性能;
- 2、【调整】Docker基础镜像调整为eclipse-temurin;
-- 3、【TODO】调度触发性能优化:调度触发后任务分批批量更新,提升调度性能;
-- 4、【TODO】调度中心OpenAPI完善,提供任务管理能力;封装Agent Skill并推送ClawHub;
+- 3、【优化】父POM依赖配置优化,移除容易配置;合并PR-3926;
+- 4、【升级】升级多项maven依赖至较新版本;
+- 5、【TODO】调度中心OpenAPI完善,提供任务管理能力;封装Agent Skill并推送ClawHub;
### TODO LIST
@@ -2827,11 +2828,10 @@ public void execute() {
- 调度日志:全局配置:废弃; 新增“调度日志策略”:任务维度自定义,保留3天、7天、1个月、3个月、一年、永久;
- 执行日志:新增“执行RollingLog开关”:任务维度自定义,支持:RollingLog、普通日志(slf4j输出)、关闭(不输出);
- 21、AccessToken:废弃全局配置;支持在线管理,动态生成、动态启停;
-- 22、任务执行后分批批量更新,提升调度性能;
-- 23、任务管理OpenAPI;
-- 24、调度中心启动参数线上配置:告警发送邮箱、Token,支持线上配置生效,修改不需重启机器;
-- 25、执行器内嵌server切换tomcat,精简依赖;
-- 26、日志策略新增:
+- 22、任务管理OpenAPI;
+- 23、调度中心启动参数线上配置:告警发送邮箱、Token,支持线上配置生效,修改不需重启机器;
+- 24、执行器内嵌server切换tomcat,精简依赖;
+- 25、日志策略新增:
- 调度日志策略:任务级设置,最少保留1天。
- 执行日志策略:可选 RollingLog、slf4jLog;
- 清理逻辑,性能重构。
diff --git a/pom.xml b/pom.xml
index d3c2c3fc..06f0c48b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,29 +25,29 @@
17
true
- 3.14.1
+ 3.15.0
3.4.0
3.12.0
3.2.8
- 0.9.0
+ 0.10.0
2.0.17
- 6.0.1
+ 6.0.3
3.0.0
- 4.0.1
- 7.0.2
+ 4.0.5
+ 7.0.6
4.0.1
- 9.5.0
+ 9.6.0
- 4.2.9.Final
+ 4.2.12.Final
- 5.0.3
+ 5.0.4
2.3.2
@@ -57,9 +57,9 @@
2.13.2
- 2.0.0-M1
+ 2.0.0-M4
- 1.2.3
+ 1.2.5
diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/mapper/XxlJobInfoMapper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/mapper/XxlJobInfoMapper.java
index 64932cf0..b2919fca 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/mapper/XxlJobInfoMapper.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/mapper/XxlJobInfoMapper.java
@@ -61,5 +61,12 @@ public interface XxlJobInfoMapper {
*/
public int scheduleUpdate(XxlJobInfo xxlJobInfo);
+ /**
+ * batch update job info
+ *
+ * @param jobInfoList
+ * @return
+ */
+ public int scheduleBatchUpdate(@Param("list") List jobInfoList);
}
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 9d66d54e..3bb89292 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
@@ -59,7 +59,7 @@ public class JobScheduleHelper {
}
logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
- // pre-read count: treadpool-size * trigger-qps (each trigger cost 100ms, qps = 1000/100 = 100)
+ // pre-read count: treadpool-size * 10 (trigger-qps: 1000ms / 100ms each trigger cost)
int preReadCount = (XxlJobAdminBootstrap.getInstance().getTriggerPoolFastMax() + XxlJobAdminBootstrap.getInstance().getTriggerPoolSlowMax()) * 10;
// do schedule
@@ -138,8 +138,14 @@ public class JobScheduleHelper {
}
// 3、update trigger info
- for (XxlJobInfo jobInfo: scheduleList) {
+ /*for (XxlJobInfo jobInfo: scheduleList) {
XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().scheduleUpdate(jobInfo);
+ }*/
+ int batchSize = 100;
+ List> scheduleListBatches = CollectionTool.split(scheduleList, batchSize);
+ for (List scheduleListBatch : scheduleListBatches) {
+ int totalAffected = XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().scheduleBatchUpdate(scheduleListBatch);
+ logger.debug(">>>>>>>>>>> xxl-job, JobScheduleHelper scheduleBatchUpdate records:" + totalAffected);
}
} else {
diff --git a/xxl-job-admin/src/main/resources/mapper/XxlJobInfoMapper.xml b/xxl-job-admin/src/main/resources/mapper/XxlJobInfoMapper.xml
index 183a2fe1..041bd4e6 100644
--- a/xxl-job-admin/src/main/resources/mapper/XxlJobInfoMapper.xml
+++ b/xxl-job-admin/src/main/resources/mapper/XxlJobInfoMapper.xml
@@ -240,34 +240,39 @@
AND trigger_status = 1
-
+
+
diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/mapper/XxlJobInfoMapperTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/mapper/XxlJobInfoMapperTest.java
index 617ff204..28b5bebb 100644
--- a/xxl-job-admin/src/test/java/com/xxl/job/admin/mapper/XxlJobInfoMapperTest.java
+++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/mapper/XxlJobInfoMapperTest.java
@@ -1,8 +1,12 @@
package com.xxl.job.admin.mapper;
+import com.xxl.job.admin.constant.TriggerStatus;
import com.xxl.job.admin.model.XxlJobInfo;
+import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap;
import com.xxl.job.admin.scheduler.misfire.MisfireStrategyEnum;
import com.xxl.job.admin.scheduler.type.ScheduleTypeEnum;
+import com.xxl.tool.core.CollectionTool;
+import com.xxl.tool.core.DateTool;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
@@ -83,4 +87,28 @@ public class XxlJobInfoMapperTest {
}
+ @Test
+ public void scheduleBatchUpdateTest(){
+
+ List list1 = xxlJobInfoMapper.pageList(0, 20, 0, -1, null, null, null);
+ int batchSize = 5;
+
+ // update
+ List list2 = list1.stream().filter(item -> (item.getId()>=4 && item.getId()<=14)).toList();
+ list2.forEach(item -> {
+ item.setTriggerLastTime(DateTool.addHours(new Date(), -1).getTime());
+ item.setTriggerNextTime(DateTool.addHours(new Date(), 1).getTime());
+ if (item.getId() == 5) {
+ item.setTriggerStatus(TriggerStatus.STOPPED.getValue());
+ }
+ });
+
+ // batch update
+ List> scheduleListBatches = CollectionTool.split(list2, batchSize);
+ for (List scheduleListBatch : scheduleListBatches) {
+ int totalAffected = XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().scheduleBatchUpdate(scheduleListBatch);
+ logger.info("scheduleBatchUpdate records:" + totalAffected);
+ }
+ }
+
}