From c00a2995c88b5028c42bd9a8d3c80bf3c3eb9142 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 18 Jul 2019 21:54:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=A7=A6=E5=8F=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BC=98=E5=8C=96=EF=BC=8C=E5=B8=B8=E8=A7=841s?= =?UTF-8?q?=E9=A2=84=E5=8A=A0=E8=BD=BD=E4=B8=80=E6=AC=A1=EF=BC=8C=E9=A2=84?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E8=BD=AE=E7=A9=BA=E6=97=B6=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E4=BC=91=E7=9C=A04s=EF=BC=8C=E9=99=8D=E4=BD=8E=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=A2=91=E7=8E=87=E4=BB=A5=E5=8F=8A=E5=AF=B9DB?= =?UTF-8?q?=E5=8E=8B=E5=8A=9B=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 2 +- .../admin/core/thread/JobScheduleHelper.java | 24 ++++++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 3774b334..12b98239 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1517,7 +1517,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 6、登录界面取消默认填写的登录账号密码; - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; -- 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 9、任务触发组件优化,常规1s预加载一次,预加载轮空时主动休眠4s,降低加载频率以及对DB压力; - 10、注册监控线程优化,降低死锁几率; - 11、调度组件优化:针对永远不会触发的Cron禁止配置和启动;任务Cron最后一次触发后再也不会触发时,比如一次性任务,主动停止相关任务; - 12、任务列表交互优化,支持查看任务所属执行器的注册节点; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java index 89c5e6d0..bd9a5128 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java @@ -52,9 +52,10 @@ public class JobScheduleHelper { Connection conn = null; while (!scheduleThreadToStop) { - // 扫描任务 + // Scan Job long start = System.currentTimeMillis(); PreparedStatement preparedStatement = null; + boolean preReadSuc = true; try { if (conn==null || conn.isClosed()) { conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection(); @@ -154,6 +155,8 @@ public class JobScheduleHelper { XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo); } + } else { + preReadSuc = false; } // tx stop @@ -187,14 +190,17 @@ public class JobScheduleHelper { } long cost = System.currentTimeMillis()-start; - // next second, align second - try { - if (cost < 1000) { - TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis()%1000); - } - } catch (InterruptedException e) { - if (!scheduleThreadToStop) { - logger.error(e.getMessage(), e); + + // Wait seconds, align second + if (cost < 1000) { // scan-overtime, not wait + try { + // pre-read success, exist job in 5s, wait 1s; + // pre-read fail, no exist job in 5s, wait 1s + TimeUnit.MILLISECONDS.sleep((preReadSuc?1000:4000) - System.currentTimeMillis()%1000); + } catch (InterruptedException e) { + if (!scheduleThreadToStop) { + logger.error(e.getMessage(), e); + } } }