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