From 4427908c2342a06a61649e5d31c04f621c897ff3 Mon Sep 17 00:00:00 2001 From: lzwcyd Date: Wed, 8 Sep 2021 19:24:37 +0800 Subject: [PATCH 01/24] doc: update callback body --- doc/XXL-JOB官方文档.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 7077d996..18565267 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1492,9 +1492,8 @@ Header: [{ "logId":1, // 本次调度日志ID "logDateTim":0, // 本次调度日志时间 - "executeResult":{ - "code": 200, // 200 表示任务执行正常,500表示失败 - "msg": null + "handleCode":200, // 200 表示任务执行正常,500表示失败 + "handleMsg": null } }] From 3604b354837083100245f69ba7e1fc53af86fc2c Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 10 Dec 2021 21:02:56 +0800 Subject: [PATCH 02/24] upgrade doc --- README.md | 31 ++++++++++++++++++++++++++++++- doc/XXL-JOB官方文档.md | 31 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6502f6b3..50c1067a 100644 --- a/README.md +++ b/README.md @@ -610,6 +610,35 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 486、IT实战联盟 - 487、杭州尤拉夫科技有限公司 - 488、中大检测(湖南)股份有限公司 + - 489、江苏电老虎工业互联网股份有限公司 + - 490、上海助通信息科技有限公司 + - 491、北京符节科技有限公司 + - 492、杭州英祐科技有限公司 + - 493、江苏电老虎工业互联网股份有限公司 + - 494、深圳市点猫科技有限公司 + - 495、杭州天音 + - 496、深圳市二十一科技互联网有限公司 + - 497、海南海口翎度科技 + - 498、北京小趣智品科技有限公司 + - 499、广州石竹计算机软件有限公司 + - 500、深圳市惟客数据科技有限公司 + - 501、中国医疗器械有限公司 + - 502、上海云谦科技有限公司 + - 503、上海磐农信息科技有限公司 + - 504、广州领航食品有限公司 + - 505、青岛掌讯通区块链科技有限公司 + - 506、北京新网数码信息技术有限公司 + - 507、超体信息科技(深圳)有限公司 + - 508、长沙店帮手信息科技有限公司 + - 509、上海助弓装饰工程有限公司 + - 510、杭州寻联网络科技有限公司 + - 511、成都大淘客科技有限公司 + - 512、松果出行 + - 513、深圳市唤梦科技有限公司 + - 514、上汽集团商用车技术中心 + - 515、北京中航讯科技股份有限公司 + - 516、北龙中网(北京)科技有限责任公司 + - 517、前海超级前台(深圳)信息技术有限公司 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 @@ -629,7 +658,7 @@ This product is open source and free, and will continue to provide free communit - Licensed under the GNU General Public License (GPL) v3. - Copyright (c) 2015-present, xuxueli. -产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。 +产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。如有需要可邮件联系作者免费获取项目授权。 ## Donate diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 7077d996..621c467f 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -580,6 +580,35 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 486、IT实战联盟 - 487、杭州尤拉夫科技有限公司 - 488、中大检测(湖南)股份有限公司 + - 489、江苏电老虎工业互联网股份有限公司 + - 490、上海助通信息科技有限公司 + - 491、北京符节科技有限公司 + - 492、杭州英祐科技有限公司 + - 493、江苏电老虎工业互联网股份有限公司 + - 494、深圳市点猫科技有限公司 + - 495、杭州天音 + - 496、深圳市二十一科技互联网有限公司 + - 497、海南海口翎度科技 + - 498、北京小趣智品科技有限公司 + - 499、广州石竹计算机软件有限公司 + - 500、深圳市惟客数据科技有限公司 + - 501、中国医疗器械有限公司 + - 502、上海云谦科技有限公司 + - 503、上海磐农信息科技有限公司 + - 504、广州领航食品有限公司 + - 505、青岛掌讯通区块链科技有限公司 + - 506、北京新网数码信息技术有限公司 + - 507、超体信息科技(深圳)有限公司 + - 508、长沙店帮手信息科技有限公司 + - 509、上海助弓装饰工程有限公司 + - 510、杭州寻联网络科技有限公司 + - 511、成都大淘客科技有限公司 + - 512、松果出行 + - 513、深圳市唤梦科技有限公司 + - 514、上汽集团商用车技术中心 + - 515、北京中航讯科技股份有限公司 + - 516、北龙中网(北京)科技有限责任公司 + - 517、前海超级前台(深圳)信息技术有限公司 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 @@ -2240,7 +2269,7 @@ public void execute() { 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 ### 8.3 开源协议和版权 -产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。 +产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。如有需要可邮件联系作者免费获取项目授权。 - Licensed under the GNU General Public License (GPL) v3. - Copyright (c) 2015-present, xuxueli. From d4132524adb2179dcfc55887916b437d11f02ff1 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 31 Dec 2021 11:37:58 +0800 Subject: [PATCH 03/24] upgrade doc --- README.md | 2 ++ doc/XXL-JOB官方文档.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 50c1067a..3d66c3a4 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,8 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 于2020-11-16,XXL-JOB参与"[2020年度最受欢迎中国开源软件](https://www.oschina.net/project/top_cn_2020)"评比,在当时已录入的一万多个开源项目中角逐,最终排名"开发框架和基础组件类"第8名。 +于2021-12-06,XXL-JOB参与"[2021年度OSC中国开源项目评选](https://www.oschina.net/project/top_cn_2021) "评比,在当时已录入的一万多个开源项目中角逐,最终当选"最受欢迎项目"。 + > 我司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。 据最新统计, 自2016-01-21接入至2017-12-01期间,该系统已调度约100万次,表现优异。新接入应用推荐使用最新版本,因为经过数十个版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。 diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 621c467f..467798ae 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -87,6 +87,8 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 于2020-11-16,XXL-JOB参与"[2020年度最受欢迎中国开源软件](https://www.oschina.net/project/top_cn_2020)"评比,在当时已录入的一万多个开源项目中角逐,最终排名"开发框架和基础组件类"第8名。 +于2021-12-06,XXL-JOB参与"[2021年度OSC中国开源项目评选](https://www.oschina.net/project/top_cn_2021) "评比,在当时已录入的一万多个开源项目中角逐,最终当选"最受欢迎项目"。 + > 我司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。 据最新统计, 自2016-01-21接入至2017-12-01期间,该系统已调度约100万次,表现优异。新接入应用推荐使用最新版本,因为经过数十个版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。 From cc60338e3d2d93014a64bbee33648818acabb92c Mon Sep 17 00:00:00 2001 From: DoolinMa <564121522@qq.com> Date: Tue, 29 Mar 2022 17:09:12 +0800 Subject: [PATCH 04/24] =?UTF-8?q?1=E3=80=81=E8=B0=83=E5=BA=A6=E4=B8=AD?= =?UTF-8?q?=E5=BF=83restfulapi=E5=9C=B0=E5=9D=80=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E4=B8=AD=E5=BA=94=E8=AF=A5=E5=B8=A6=E6=9C=89/api=202=E3=80=81?= =?UTF-8?q?=E6=A1=A3=E4=B8=AD=E2=80=9C=E8=B7=9F=E2=80=9D=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E6=96=87=E5=AD=97=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 467798ae..6be128b2 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -776,7 +776,7 @@ docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_jo 执行器配置,配置内容说明: - ### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; + ### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### 执行器通讯TOKEN [选填]:非空时启用; @@ -1514,7 +1514,7 @@ API服务请求参考代码:com.xxl.job.adminbiz.AdminBizTest ------ -地址格式:{调度中心跟地址}/callback +地址格式:{调度中心根地址}/api/callback Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1542,7 +1542,7 @@ Header: ------ -地址格式:{调度中心跟地址}/registry +地址格式:{调度中心根地址}/api/registry Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1567,7 +1567,7 @@ Header: ------ -地址格式:{调度中心跟地址}/registryRemove +地址格式:{调度中心根地址}/api/registryRemove Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1597,7 +1597,7 @@ API服务请求参考代码:com.xxl.job.executorbiz.ExecutorBizTest ------ -地址格式:{执行器内嵌服务跟地址}/beat +地址格式:{执行器内嵌服务根地址}/beat Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1617,7 +1617,7 @@ Header: ------ -地址格式:{执行器内嵌服务跟地址}/idleBeat +地址格式:{执行器内嵌服务根地址}/idleBeat Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1640,7 +1640,7 @@ Header: ------ -地址格式:{执行器内嵌服务跟地址}/run +地址格式:{执行器内嵌服务根地址}/run Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1674,7 +1674,7 @@ Header: ------ -地址格式:{执行器内嵌服务跟地址}/kill +地址格式:{执行器内嵌服务根地址}/kill Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} @@ -1698,7 +1698,7 @@ Header: ------ -地址格式:{执行器内嵌服务跟地址}/log +地址格式:{执行器内嵌服务根地址}/log Header: XXL-JOB-ACCESS-TOKEN : {请求令牌} From 3abdfc6e2fff7de9eb05867f7aba7b782d5e9a20 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Tue, 19 Apr 2022 14:52:37 +0800 Subject: [PATCH 05/24] upgrade doc --- doc/XXL-JOB官方文档.md | 12 ++++++------ pom.xml | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 467798ae..fa88b15a 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2210,15 +2210,15 @@ public void execute() { - 27、【修复】执行器日志清理优化,修复小概率下日志文件为空导致清理异常问题; ### 7.32 版本 v2.3.1 Release Notes[规划中] -- 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 +- 1、【优化】升级项目依赖,修复低版本风险漏洞问题,设计netty、groovy、gson、spring、springboot等; +- 2、【优化】合并多项PR:代码结构、代码变量和注释等多项优化调整; +- 3、【优化】任务线程名优化(ISSUE-2527) +- 4、【修复】邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰; +- 5、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - 普通任务:只记录一条主任务; - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 -- 2、【优化】[规划中]分片任务:全部完成后才会出发后置节点; -- 3、【优化】多个项目依赖升级至较新稳定版本,如netty、groovy、spring、springboot等; -- 4、【优化】合并多项PR:代码结构、代码变量和注释等多项优化调整; -- 5、【优化】任务线程名优化(ISSUE-2527) -- 6、【修复】邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰; +- 6、【优化】[规划中]分片任务:全部完成后才会出发后置节点; ### 7.33 版本 v2.4.0 Release Notes[规划中] - 1、[规划中]DAG流程任务 diff --git a/pom.xml b/pom.xml index f60aa5c1..1f57e72c 100644 --- a/pom.xml +++ b/pom.xml @@ -25,24 +25,24 @@ true 4.1.63.Final - 2.8.6 + 2.9.0 - 5.3.6 - 2.4.5 + 5.3.19 + 2.6.6 - 2.1.4 - 8.0.24 + 2.2.2 + 8.0.28 - 1.7.30 - 5.7.1 + 1.7.36 + 5.8.2 1.3.2 - 3.0.8 + 3.0.10 3.2.1 - 3.2.0 + 3.3.2 1.6 - 3.3.1 + 3.3.2 From d55068a5bf04310558ef093e89257dc1964cd886 Mon Sep 17 00:00:00 2001 From: cszxyang Date: Wed, 20 Apr 2022 00:14:01 +0800 Subject: [PATCH 06/24] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E3=80=81=E6=97=A5=E5=BF=97=E5=A4=84=E7=90=86=E5=8F=8A=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81=E7=AE=80=E5=8D=95=E7=BE=8E=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xxl/job/core/executor/XxlJobExecutor.java | 8 ++- .../com/xxl/job/core/server/EmbedServer.java | 64 ++++++++----------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index 70a2dad9..4719b7b7 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -83,6 +83,7 @@ public class XxlJobExecutor { // init executor-server initEmbedServer(address, ip, port, appname, accessToken); } + public void destroy(){ // destroy executor-server stopEmbedServer(); @@ -131,6 +132,7 @@ public class XxlJobExecutor { } } } + public static List getAdminBizList(){ return adminBizList; } @@ -251,6 +253,7 @@ public class XxlJobExecutor { return newJobThread; } + public static JobThread removeJobThread(int jobId, String removeOldReason){ JobThread oldJobThread = jobThreadRepository.remove(jobId); if (oldJobThread != null) { @@ -261,9 +264,8 @@ public class XxlJobExecutor { } return null; } + public static JobThread loadJobThread(int jobId){ - JobThread jobThread = jobThreadRepository.get(jobId); - return jobThread; + return jobThreadRepository.get(jobId); } - } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java b/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java index 242d6b63..540e0ea2 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java @@ -36,10 +36,8 @@ public class EmbedServer { public void start(final String address, final int port, final String appname, final String accessToken) { executorBiz = new ExecutorBizImpl(); thread = new Thread(new Runnable() { - @Override public void run() { - // param EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); @@ -61,8 +59,6 @@ public class EmbedServer { throw new RuntimeException("xxl-job, EmbedServer bizThreadPool is EXHAUSTED!"); } }); - - try { // start server ServerBootstrap bootstrap = new ServerBootstrap(); @@ -92,11 +88,9 @@ public class EmbedServer { future.channel().closeFuture().sync(); } catch (InterruptedException e) { - if (e instanceof InterruptedException) { - logger.info(">>>>>>>>>>> xxl-job remoting server stop."); - } else { - logger.error(">>>>>>>>>>> xxl-job remoting server error.", e); - } + logger.info(">>>>>>>>>>> xxl-job remoting server stop."); + } catch (Exception e) { + logger.error(">>>>>>>>>>> xxl-job remoting server error.", e); } finally { // stop try { @@ -106,17 +100,15 @@ public class EmbedServer { logger.error(e.getMessage(), e); } } - } - }); - thread.setDaemon(true); // daemon, service jvm, user thread leave >>> daemon leave >>> jvm leave + thread.setDaemon(true); // daemon, service jvm, user thread leave >>> daemon leave >>> jvm leave thread.start(); } public void stop() throws Exception { // destroy server thread - if (thread!=null && thread.isAlive()) { + if (thread != null && thread.isAlive()) { thread.interrupt(); } @@ -130,7 +122,7 @@ public class EmbedServer { /** * netty_http - * + *

* Copy from : https://github.com/xuxueli/xxl-rpc * * @author xuxueli 2015-11-24 22:25:15 @@ -141,6 +133,7 @@ public class EmbedServer { private ExecutorBiz executorBiz; private String accessToken; private ThreadPoolExecutor bizThreadPool; + public EmbedHttpServerHandler(ExecutorBiz executorBiz, String accessToken, ThreadPoolExecutor bizThreadPool) { this.executorBiz = executorBiz; this.accessToken = accessToken; @@ -149,7 +142,6 @@ public class EmbedServer { @Override protected void channelRead0(final ChannelHandlerContext ctx, FullHttpRequest msg) throws Exception { - // request parse //final byte[] requestBytes = ByteBufUtil.getBytes(msg.content()); // byteBuf.toString(io.netty.util.CharsetUtil.UTF_8); String requestData = msg.content().toString(CharsetUtil.UTF_8); @@ -175,38 +167,38 @@ public class EmbedServer { } private Object process(HttpMethod httpMethod, String uri, String requestData, String accessTokenReq) { - // valid if (HttpMethod.POST != httpMethod) { return new ReturnT(ReturnT.FAIL_CODE, "invalid request, HttpMethod not support."); } - if (uri==null || uri.trim().length()==0) { + if (uri == null || uri.trim().length() == 0) { return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping empty."); } - if (accessToken!=null - && accessToken.trim().length()>0 + if (accessToken != null + && accessToken.trim().length() > 0 && !accessToken.equals(accessTokenReq)) { return new ReturnT(ReturnT.FAIL_CODE, "The access token is wrong."); } // services mapping try { - if ("/beat".equals(uri)) { - return executorBiz.beat(); - } else if ("/idleBeat".equals(uri)) { - IdleBeatParam idleBeatParam = GsonTool.fromJson(requestData, IdleBeatParam.class); - return executorBiz.idleBeat(idleBeatParam); - } else if ("/run".equals(uri)) { - TriggerParam triggerParam = GsonTool.fromJson(requestData, TriggerParam.class); - return executorBiz.run(triggerParam); - } else if ("/kill".equals(uri)) { - KillParam killParam = GsonTool.fromJson(requestData, KillParam.class); - return executorBiz.kill(killParam); - } else if ("/log".equals(uri)) { - LogParam logParam = GsonTool.fromJson(requestData, LogParam.class); - return executorBiz.log(logParam); - } else { - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping("+ uri +") not found."); + switch (uri) { + case "/beat": + return executorBiz.beat(); + case "/idleBeat": + IdleBeatParam idleBeatParam = GsonTool.fromJson(requestData, IdleBeatParam.class); + return executorBiz.idleBeat(idleBeatParam); + case "/run": + TriggerParam triggerParam = GsonTool.fromJson(requestData, TriggerParam.class); + return executorBiz.run(triggerParam); + case "/kill": + KillParam killParam = GsonTool.fromJson(requestData, KillParam.class); + return executorBiz.kill(killParam); + case "/log": + LogParam logParam = GsonTool.fromJson(requestData, LogParam.class); + return executorBiz.log(logParam); + default: + return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping(" + uri + ") not found."); } } catch (Exception e) { logger.error(e.getMessage(), e); @@ -261,6 +253,4 @@ public class EmbedServer { // stop registry ExecutorRegistryThread.getInstance().toStop(); } - - } From 0931df7153c21204278e4352c536e1896ca1f13a Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Wed, 20 Apr 2022 15:55:12 +0800 Subject: [PATCH 07/24] code optimize --- .../xxl/job/admin/controller/JobInfoControllerTest.java | 5 ++++- .../java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java | 9 ++++++--- .../test/java/com/xxl/job/admin/util/I18nUtilTest.java | 9 ++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/controller/JobInfoControllerTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/controller/JobInfoControllerTest.java index a8231cbe..49bf8aec 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/controller/JobInfoControllerTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/controller/JobInfoControllerTest.java @@ -3,6 +3,8 @@ package com.xxl.job.admin.controller; import com.xxl.job.admin.service.LoginService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.LinkedMultiValueMap; @@ -13,6 +15,7 @@ import javax.servlet.http.Cookie; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; public class JobInfoControllerTest extends AbstractSpringMvcTest { + private static Logger logger = LoggerFactory.getLogger(JobInfoControllerTest.class); private Cookie cookie; @@ -41,7 +44,7 @@ public class JobInfoControllerTest extends AbstractSpringMvcTest { .cookie(cookie) ).andReturn(); - System.out.println(ret.getResponse().getContentAsString()); + logger.info(ret.getResponse().getContentAsString()); } } diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java index 4fce17ec..0cb7d53c 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java @@ -4,6 +4,8 @@ import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum; import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; @@ -12,6 +14,7 @@ import java.util.List; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class XxlJobInfoDaoTest { + private static Logger logger = LoggerFactory.getLogger(XxlJobInfoDaoTest.class); @Resource private XxlJobInfoDao xxlJobInfoDao; @@ -20,9 +23,9 @@ public class XxlJobInfoDaoTest { public void pageList(){ List list = xxlJobInfoDao.pageList(0, 20, 0, -1, null, null, null); int list_count = xxlJobInfoDao.pageListCount(0, 20, 0, -1, null, null, null); - - System.out.println(list); - System.out.println(list_count); + + logger.info("", list); + logger.info("", list_count); List list2 = xxlJobInfoDao.getJobsByGroup(1); } diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java index a62541f7..29079f18 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java @@ -2,6 +2,8 @@ package com.xxl.job.admin.util; import com.xxl.job.admin.core.util.I18nUtil; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; /** @@ -11,12 +13,13 @@ import org.springframework.boot.test.context.SpringBootTest; */ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class I18nUtilTest { + private static Logger logger = LoggerFactory.getLogger(I18nUtilTest.class); @Test public void test(){ - System.out.println(I18nUtil.getString("admin_name")); - System.out.println(I18nUtil.getMultString("admin_name", "admin_name_full")); - System.out.println(I18nUtil.getMultString()); + logger.info(I18nUtil.getString("admin_name")); + logger.info(I18nUtil.getMultString("admin_name", "admin_name_full")); + logger.info(I18nUtil.getMultString()); } } From fa2dfc97497fd3a9911dec83c4143f15ba71c362 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 21 May 2022 13:14:25 +0800 Subject: [PATCH 08/24] upgrade --- doc/XXL-JOB官方文档.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index fa88b15a..51946f9e 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2210,17 +2210,19 @@ public void execute() { - 27、【修复】执行器日志清理优化,修复小概率下日志文件为空导致清理异常问题; ### 7.32 版本 v2.3.1 Release Notes[规划中] -- 1、【优化】升级项目依赖,修复低版本风险漏洞问题,设计netty、groovy、gson、spring、springboot等; -- 2、【优化】合并多项PR:代码结构、代码变量和注释等多项优化调整; -- 3、【优化】任务线程名优化(ISSUE-2527) -- 4、【修复】邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰; -- 5、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 +- 1、【修复】修复低版本风险漏洞,升级项目依赖:CVE-2021-2471、CVE-2022-22965等; +- 2、【修复】邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰; +- 3、【优化】合并多项PR,项目代码结构、健壮性优化:PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、; +- 4、【优化】任务线程名优化(ISSUE-2527) + +### 7.33 版本 v2.3.2 Release Notes[规划中] +- 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - 普通任务:只记录一条主任务; - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 -- 6、【优化】[规划中]分片任务:全部完成后才会出发后置节点; +- 2、【优化】[规划中]分片任务:全部完成后才会出发后置节点; -### 7.33 版本 v2.4.0 Release Notes[规划中] +### 7.34 版本 v2.4.0 Release Notes[规划中] - 1、[规划中]DAG流程任务 - DAG任务:支持参数传递,共享数据:DAG任务创建、管理,DAG任务日志查看、操作; - 子任务:废弃 From 390165d733ccaf14096bfb259863b9bdb2c58f86 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 21 May 2022 14:27:39 +0800 Subject: [PATCH 09/24] =?UTF-8?q?=E8=B0=83=E5=BA=A6=E9=80=9A=E8=AE=AF?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=90=AF=E7=94=A8accessToken=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E7=B3=BB=E7=BB=9F=E5=AE=89=E5=85=A8=E6=80=A7?= =?UTF-8?q?=EF=BC=88=E5=BB=BA=E8=AE=AE=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89accessToken=EF=BC=89=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 3 ++- pom.xml | 11 +++++------ .../controller/interceptor/CookieInterceptor.java | 7 +++---- .../controller/interceptor/PermissionInterceptor.java | 8 ++++---- .../src/main/resources/application.properties | 2 +- .../src/main/resources/xxl-job-executor.properties | 2 +- .../src/main/resources/application.properties | 2 +- 7 files changed, 17 insertions(+), 18 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index f9c604fa..e4cd49b4 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2213,7 +2213,8 @@ public void execute() { - 1、【修复】修复低版本风险漏洞,升级项目依赖:CVE-2021-2471、CVE-2022-22965等; - 2、【修复】邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰; - 3、【优化】合并多项PR,项目代码结构、健壮性优化:PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、; -- 4、【优化】任务线程名优化(ISSUE-2527) +- 4、【优化】任务线程名优化(ISSUE-2527); +- 5、【优化】调度通讯默认启用accessToken,提升系统安全性(建议生产环境自定义accessToken)。 ### 7.33 版本 v2.3.2 Release Notes[规划中] - 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 diff --git a/pom.xml b/pom.xml index 1f57e72c..202f036b 100644 --- a/pom.xml +++ b/pom.xml @@ -27,11 +27,11 @@ 4.1.63.Final 2.9.0 - 5.3.19 - 2.6.6 + 5.3.20 + 2.6.7 2.2.2 - 8.0.28 + 8.0.29 1.7.36 5.8.2 @@ -40,9 +40,8 @@ 3.0.10 3.2.1 - 3.3.2 - 1.6 - 3.3.2 + 3.4.0 + 3.0.1 diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java index 8c2437ef..930b9e8a 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java @@ -3,8 +3,8 @@ package com.xxl.job.admin.controller.interceptor; import com.xxl.job.admin.core.util.FtlUtil; import com.xxl.job.admin.core.util.I18nUtil; import org.springframework.stereotype.Component; +import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -17,7 +17,7 @@ import java.util.HashMap; * @author xuxueli 2015-12-12 18:09:04 */ @Component -public class CookieInterceptor extends HandlerInterceptorAdapter { +public class CookieInterceptor implements AsyncHandlerInterceptor { @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @@ -36,8 +36,7 @@ public class CookieInterceptor extends HandlerInterceptorAdapter { if (modelAndView != null) { modelAndView.addObject("I18nUtil", FtlUtil.generateStaticModel(I18nUtil.class.getName())); } - - super.postHandle(request, response, handler, modelAndView); + } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java index 8ac2e40b..ecb28114 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java @@ -6,7 +6,7 @@ import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.service.LoginService; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import org.springframework.web.servlet.AsyncHandlerInterceptor; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -18,7 +18,7 @@ import javax.servlet.http.HttpServletResponse; * @author xuxueli 2015-12-12 18:09:04 */ @Component -public class PermissionInterceptor extends HandlerInterceptorAdapter { +public class PermissionInterceptor implements AsyncHandlerInterceptor { @Resource private LoginService loginService; @@ -27,7 +27,7 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { - return super.preHandle(request, response, handler); + return true; // proceed with the next interceptor } // if need login @@ -53,7 +53,7 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter { request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, loginUser); } - return super.preHandle(request, response, handler); + return true; // proceed with the next interceptor } } diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index afe93b42..8727b6c7 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -52,7 +52,7 @@ spring.mail.properties.mail.smtp.starttls.required=true spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory ### xxl-job, access token -xxl.job.accessToken= +xxl.job.accessToken=default_token ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") xxl.job.i18n=zh_CN diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties index 15a803a6..9b1ab8a7 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties +++ b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties @@ -2,7 +2,7 @@ xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### xxl-job, access token -xxl.job.accessToken= +xxl.job.accessToken=default_token ### xxl-job executor appname xxl.job.executor.appname=xxl-job-executor-sample diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties index e067db4f..14c796e8 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties @@ -11,7 +11,7 @@ logging.config=classpath:logback.xml xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### xxl-job, access token -xxl.job.accessToken= +xxl.job.accessToken=default_token ### xxl-job executor appname xxl.job.executor.appname=xxl-job-executor-sample From 7e6b3b732c784e15c2f5976a2c187f4d178064cf Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 21 May 2022 15:54:40 +0800 Subject: [PATCH 10/24] upgrade version --- doc/XXL-JOB官方文档.md | 19 ++++++++++--------- doc/db/tables_xxl_job.sql | 2 +- pom.xml | 2 +- xxl-job-admin/pom.xml | 2 +- .../main/resources/i18n/message_en.properties | 2 +- .../resources/i18n/message_zh_CN.properties | 2 +- .../resources/i18n/message_zh_TC.properties | 2 +- xxl-job-core/pom.xml | 2 +- xxl-job-executor-samples/pom.xml | 2 +- .../xxl-job-executor-sample-frameless/pom.xml | 2 +- .../pom.xml | 2 +- 11 files changed, 20 insertions(+), 19 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index e4cd49b4..e127ef27 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2209,27 +2209,28 @@ public void execute() { - 26、【修复】页面redirect跳转后https变为http问题修复; - 27、【修复】执行器日志清理优化,修复小概率下日志文件为空导致清理异常问题; -### 7.32 版本 v2.3.1 Release Notes[规划中] -- 1、【修复】修复低版本风险漏洞,升级项目依赖:CVE-2021-2471、CVE-2022-22965等; -- 2、【修复】邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰; -- 3、【优化】合并多项PR,项目代码结构、健壮性优化:PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、; -- 4、【优化】任务线程名优化(ISSUE-2527); -- 5、【优化】调度通讯默认启用accessToken,提升系统安全性(建议生产环境自定义accessToken)。 - -### 7.33 版本 v2.3.2 Release Notes[规划中] +### 7.32 版本 v2.3.1 Release Notes[2022-05-21] +- 1、【修复】修复风险漏洞,升级问题低版本项目依赖:CVE-2021-2471、CVE-2022-22965等。 +- 2、【修复】修复故障告警逻辑,邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰。 +- 3、【优化】调度通讯默认启用accessToken,提升系统安全性(建议生产环境自定义accessToken)。 +- 4、【优化】合并多项PR,项目代码结构、健壮性优化:PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、PR-2591。 +- 5、【优化】任务线程名优化,提升可读性与问题定位效率(ISSUE-2527)。 + +### 7.33 版本 v2.4.0 Release Notes[规划中] - 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - 普通任务:只记录一条主任务; - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 - 2、【优化】[规划中]分片任务:全部完成后才会出发后置节点; -### 7.34 版本 v2.4.0 Release Notes[规划中] +### 7.34 版本 v2.4.1 Release Notes[规划中] - 1、[规划中]DAG流程任务 - DAG任务:支持参数传递,共享数据:DAG任务创建、管理,DAG任务日志查看、操作; - 子任务:废弃 - 2、[规划中]多数据库支持,DAO层通过JPA实现,不限制数据库类型; - 3、[规划中]告警增强:邮件告警 + webhook告警; - 4、[规划中]安全强化:AccessToken动态生成、动态启停;控制调度、回调; +- 5、[规划中]任务导入导出工具,灵活支持版本升级、迁移等场景。 ### TODO LIST - 1、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定; diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index a3202128..ed8ecaeb 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -1,5 +1,5 @@ # -# XXL-JOB v2.3.1-SNAPSHOT +# XXL-JOB v2.3.1 # Copyright (c) 2015-present, xuxueli. CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; diff --git a/pom.xml b/pom.xml index 202f036b..4b068b16 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.xuxueli xxl-job - 2.3.1-SNAPSHOT + 2.3.1 pom ${project.artifactId} diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index 5ff4f5c8..b10941f6 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.3.1-SNAPSHOT + 2.3.1 xxl-job-admin jar diff --git a/xxl-job-admin/src/main/resources/i18n/message_en.properties b/xxl-job-admin/src/main/resources/i18n/message_en.properties index 7d67636d..001f841a 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_en.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties @@ -1,6 +1,6 @@ admin_name=Scheduling Center admin_name_full=Distributed Task Scheduling Platform XXL-JOB -admin_version=2.3.1-SNAPSHOT +admin_version=2.3.1 admin_i18n=en ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties index 4897a238..69ef6e3d 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties @@ -1,6 +1,6 @@ admin_name=任务调度中心 admin_name_full=分布式任务调度平台XXL-JOB -admin_version=2.3.1-SNAPSHOT +admin_version=2.3.1 admin_i18n= ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties index 57d28e4f..35916c0d 100755 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties @@ -1,6 +1,6 @@ admin_name=任務調度中心 admin_name_full=分布式任務調度平臺XXL-JOB -admin_version=2.3.1-SNAPSHOT +admin_version=2.3.1 admin_i18n= ## system diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index 48f3d50d..7a035927 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.3.1-SNAPSHOT + 2.3.1 xxl-job-core jar diff --git a/xxl-job-executor-samples/pom.xml b/xxl-job-executor-samples/pom.xml index 712daf11..3ad85ff9 100644 --- a/xxl-job-executor-samples/pom.xml +++ b/xxl-job-executor-samples/pom.xml @@ -5,7 +5,7 @@ com.xuxueli xxl-job - 2.3.1-SNAPSHOT + 2.3.1 xxl-job-executor-samples pom diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml index 39482c54..e01d4d48 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.3.1-SNAPSHOT + 2.3.1 xxl-job-executor-sample-frameless jar diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml index 16ac25c0..84ea9ea5 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.3.1-SNAPSHOT + 2.3.1 xxl-job-executor-sample-springboot jar From 76ab3f2cadb288df22a962af93caa54b1565fdac Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 21 May 2022 16:13:31 +0800 Subject: [PATCH 11/24] update document --- doc/XXL-JOB官方文档.md | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index b94b40a7..0a043631 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -611,6 +611,46 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 515、北京中航讯科技股份有限公司 - 516、北龙中网(北京)科技有限责任公司 - 517、前海超级前台(深圳)信息技术有限公司 + - 518、上海中商网络股份有限公司 + - 519、上海助通信息科技有限公司 + - 520、宁波聚臻智能科技有限公司 + - 521、上海零动数码科技股份有限公司 + - 522、浙江学海教育科技有限公司 + - 523、聚学云(山东)信息技术有限公司 + - 524、多氟多新材料股份有限公司 + - 525、智慧眼科技股份有限公司 + - 526、广东智通人才连锁股份有限公司 + - 527、世纪开元智印互联科技集团股份有限公司 + - 528、北京理想汽车【理想汽车】 + - 529、巽逸科技(重庆)有限公司 + - 530、义乌购电子商务有限公司 + - 531、深圳市珂莱蒂尔服饰有限公司 + - 532、江西国泰利民信息科技有限公司 + - 533、广西广电大数据科技有限公司 + - 534、杭州艾麦科技有限公司 + - 535、广州小滴科技有限公司 + - 536、佳缘科技股份有限公司 + - 537、上海深擎信息科技有限公司 + - 538、武商网 + - 539、福建民本信息科技有限公司 + - 540、杭州惠合信息科技有限公司 + - 541、厦门爱立得科技有限公司 + - 542、成都拟合未来科技有限公司 + - 543、宁波聚臻智能科技有限公司 + - 544、广东百慧科技有限公司 + - 545、笨马网络 + - 546、深圳市信安数字科技有限公司 + - 547、深圳市思乐数据技术有限公司 + - 548、四川绿源集科技有限公司 + - 549、湖南云医链生物科技有限公司 + - 550、杭州源诚科技有限公司 + - 551、北京开课吧科技有限公司 + - 552、北京多来点信息技术有限公司 + - 553、JEECG BOOT低代码开发平台 + - 554、苏州同元软控信息技术有限公司 + - 555、江苏大泰信息技术有限公司 + - 556、北京大禹汇智 + - 557、北京盛哲科技有限公司 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 From 3cf27f90b47a6928a52685cda9f78b7b191878d7 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 21 May 2022 18:59:26 +0800 Subject: [PATCH 12/24] ugrade dev version --- doc/db/tables_xxl_job.sql | 2 +- pom.xml | 2 +- xxl-job-admin/pom.xml | 2 +- xxl-job-admin/src/main/resources/i18n/message_en.properties | 2 +- xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties | 2 +- xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties | 2 +- xxl-job-core/pom.xml | 2 +- xxl-job-executor-samples/pom.xml | 2 +- .../xxl-job-executor-sample-frameless/pom.xml | 2 +- .../xxl-job-executor-sample-springboot/pom.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index ed8ecaeb..33dbb0c1 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -1,5 +1,5 @@ # -# XXL-JOB v2.3.1 +# XXL-JOB v2.4.0-SNAPSHOT # Copyright (c) 2015-present, xuxueli. CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; diff --git a/pom.xml b/pom.xml index 4b068b16..a4cdc76b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.xuxueli xxl-job - 2.3.1 + 2.4.0-SNAPSHOT pom ${project.artifactId} diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index b10941f6..d1eb7952 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.3.1 + 2.4.0-SNAPSHOT xxl-job-admin jar diff --git a/xxl-job-admin/src/main/resources/i18n/message_en.properties b/xxl-job-admin/src/main/resources/i18n/message_en.properties index 001f841a..2e91fd69 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_en.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties @@ -1,6 +1,6 @@ admin_name=Scheduling Center admin_name_full=Distributed Task Scheduling Platform XXL-JOB -admin_version=2.3.1 +admin_version=2.4.0-SNAPSHOT admin_i18n=en ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties index 69ef6e3d..7891570d 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties @@ -1,6 +1,6 @@ admin_name=任务调度中心 admin_name_full=分布式任务调度平台XXL-JOB -admin_version=2.3.1 +admin_version=2.4.0-SNAPSHOT admin_i18n= ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties index 35916c0d..c61994d1 100755 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties @@ -1,6 +1,6 @@ admin_name=任務調度中心 admin_name_full=分布式任務調度平臺XXL-JOB -admin_version=2.3.1 +admin_version=2.4.0-SNAPSHOT admin_i18n= ## system diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index 7a035927..92ebf731 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.3.1 + 2.4.0-SNAPSHOT xxl-job-core jar diff --git a/xxl-job-executor-samples/pom.xml b/xxl-job-executor-samples/pom.xml index 3ad85ff9..11187b8b 100644 --- a/xxl-job-executor-samples/pom.xml +++ b/xxl-job-executor-samples/pom.xml @@ -5,7 +5,7 @@ com.xuxueli xxl-job - 2.3.1 + 2.4.0-SNAPSHOT xxl-job-executor-samples pom diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml index e01d4d48..7972677b 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.3.1 + 2.4.0-SNAPSHOT xxl-job-executor-sample-frameless jar diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml index 84ea9ea5..9175792a 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.3.1 + 2.4.0-SNAPSHOT xxl-job-executor-sample-springboot jar From ab4f7bfc5e46b52418743f25c3ee6dfb8ae24582 Mon Sep 17 00:00:00 2001 From: zaomianbao <354311909@qq.com> Date: Fri, 16 Sep 2022 14:25:50 +0800 Subject: [PATCH 13/24] fix wrong words in doc --- doc/XXL-JOB官方文档.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 0a043631..854a48ec 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -930,8 +930,8 @@ public XxlJobSpringExecutor xxlJobExecutor() { 固定速度:该类型将会以固定速度,触发任务调度;按照固定的间隔时间,周期性触发; 固定延迟:该类型将会以固定延迟,触发任务调度;按照固定的延迟时间,从上次调度结束后开始计算延迟时间,到达延迟时间后触发下次调度; - CRON:触发任务执行的Cron表达式; - - 固定速度:固件速度的时间间隔,单位为秒; - - 固定延迟:固件延迟的时间间隔,单位为秒; + - 固定速度:固定速度的时间间隔,单位为秒; + - 固定延迟:固定延迟的时间间隔,单位为秒; 任务配置: - 运行模式: From d8191c43a8726a7fcc38f66dca7767091e22c8e5 Mon Sep 17 00:00:00 2001 From: zaomianbao <354311909@qq.com> Date: Fri, 16 Sep 2022 17:29:15 +0800 Subject: [PATCH 14/24] fix wrong words in doc --- doc/XXL-JOB官方文档.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 854a48ec..dfbf0e0d 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1395,7 +1395,7 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过 日志文件存放的位置可在“执行器”配置文件进行自定义,默认目录格式为:/data/applogs/xxl-job/jobhandler/“格式化日期”/“数据库调度日志记录的主键ID.log”。 -在JobHandler中开启子线程时,子线程将会将会把日志打印在父线程即JobHandler的执行日志中,方便日志追踪。 +在JobHandler中开启子线程时,子线程将会把日志打印在父线程即JobHandler的执行日志中,方便日志追踪。 ### 5.6 通讯模块剖析 From b4835d40f18084e9facb9ec0d41993fdc885aca8 Mon Sep 17 00:00:00 2001 From: jiabao1 Date: Fri, 23 Sep 2022 18:09:59 +0800 Subject: [PATCH 15/24] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8DxxlJob=20initJobHan?= =?UTF-8?q?dlerMethodRepository=20=E8=B0=83=E7=94=A8getBean=E6=96=B9?= =?UTF-8?q?=E6=B3=95=20=E6=8F=90=E5=89=8D=E5=88=9D=E5=A7=8B=E5=8C=96Bean?= =?UTF-8?q?=20=E5=AF=BC=E8=87=B4=E6=87=92=E5=8A=A0=E8=BD=BD=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../job/core/executor/impl/XxlJobSpringExecutor.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java index 3c2a67d5..16dbc97e 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Lazy; import org.springframework.core.MethodIntrospector; import org.springframework.core.annotation.AnnotatedElementUtils; @@ -84,7 +85,14 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC // init job handler from method String[] beanDefinitionNames = applicationContext.getBeanNamesForType(Object.class, false, true); for (String beanDefinitionName : beanDefinitionNames) { - Object bean = applicationContext.getBean(beanDefinitionName); + Object bean = null; + Lazy onBean = applicationContext.findAnnotationOnBean(beanDefinitionName, Lazy.class); + if (onBean!=null){ + logger.debug("xxl-job skip @Lazy Bean:{}",beanDefinitionName); + continue; + }else { + bean = applicationContext.getBean(beanDefinitionName); + } Map annotatedMethods = null; // referred to :org.springframework.context.event.EventListenerMethodProcessor.processBean try { From 7fa724ba26416eadaa9706ce6b7f3d991d0ec58a Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sun, 2 Oct 2022 16:03:18 +0800 Subject: [PATCH 16/24] update document --- doc/XXL-JOB官方文档.md | 5 +++-- .../executor/impl/XxlJobSpringExecutor.java | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 0a043631..549c8b3d 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2256,11 +2256,12 @@ public void execute() { - 5、【优化】任务线程名优化,提升可读性与问题定位效率(ISSUE-2527)。 ### 7.33 版本 v2.4.0 Release Notes[规划中] -- 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 +- 1、【优化】执行器任务Bean扫描逻辑优化:解决懒加载注解失效问题。 +- 2、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - 普通任务:只记录一条主任务; - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 -- 2、【优化】[规划中]分片任务:全部完成后才会出发后置节点; +- 3、【优化】[规划中]分片任务:全部完成后才会出发后置节点; ### 7.34 版本 v2.4.1 Release Notes[规划中] - 1、[规划中]DAG流程任务 diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java index 16dbc97e..953903c3 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java @@ -3,7 +3,6 @@ package com.xxl.job.core.executor.impl; import com.xxl.job.core.executor.XxlJobExecutor; import com.xxl.job.core.glue.GlueFactory; import com.xxl.job.core.handler.annotation.XxlJob; -import com.xxl.job.core.handler.impl.MethodJobHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -85,15 +84,18 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC // init job handler from method String[] beanDefinitionNames = applicationContext.getBeanNamesForType(Object.class, false, true); for (String beanDefinitionName : beanDefinitionNames) { + + // get bean Object bean = null; Lazy onBean = applicationContext.findAnnotationOnBean(beanDefinitionName, Lazy.class); if (onBean!=null){ - logger.debug("xxl-job skip @Lazy Bean:{}",beanDefinitionName); + logger.debug("xxl-job annotation scan, skip @Lazy Bean:{}", beanDefinitionName); continue; }else { bean = applicationContext.getBean(beanDefinitionName); } + // filter method Map annotatedMethods = null; // referred to :org.springframework.context.event.EventListenerMethodProcessor.processBean try { annotatedMethods = MethodIntrospector.selectMethods(bean.getClass(), @@ -110,12 +112,14 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC continue; } + // generate and regist method job handler for (Map.Entry methodXxlJobEntry : annotatedMethods.entrySet()) { Method executeMethod = methodXxlJobEntry.getKey(); XxlJob xxlJob = methodXxlJobEntry.getValue(); // regist registJobHandler(xxlJob, bean, executeMethod); } + } } @@ -131,4 +135,13 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC return applicationContext; } + /* + BeanDefinitionRegistryPostProcessor + registry.getBeanDefine() + @Override + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { + this.registry = registry; + } + * */ + } From 8c415582e544d538d7bd6d07e7b55ff5672ca86b Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sun, 2 Oct 2022 16:15:22 +0800 Subject: [PATCH 17/24] update document --- README.md | 61 ++++++++++++++++++++++++++++++++++++++ doc/XXL-JOB官方文档.md | 23 +++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d66c3a4..08693b39 100644 --- a/README.md +++ b/README.md @@ -641,6 +641,67 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 515、北京中航讯科技股份有限公司 - 516、北龙中网(北京)科技有限责任公司 - 517、前海超级前台(深圳)信息技术有限公司 + - 518、上海中商网络股份有限公司 + - 519、上海助通信息科技有限公司 + - 520、宁波聚臻智能科技有限公司 + - 521、上海零动数码科技股份有限公司 + - 522、浙江学海教育科技有限公司 + - 523、聚学云(山东)信息技术有限公司 + - 524、多氟多新材料股份有限公司 + - 525、智慧眼科技股份有限公司 + - 526、广东智通人才连锁股份有限公司 + - 527、世纪开元智印互联科技集团股份有限公司 + - 528、北京理想汽车【理想汽车】 + - 529、巽逸科技(重庆)有限公司 + - 530、义乌购电子商务有限公司 + - 531、深圳市珂莱蒂尔服饰有限公司 + - 532、江西国泰利民信息科技有限公司 + - 533、广西广电大数据科技有限公司 + - 534、杭州艾麦科技有限公司 + - 535、广州小滴科技有限公司 + - 536、佳缘科技股份有限公司 + - 537、上海深擎信息科技有限公司 + - 538、武商网 + - 539、福建民本信息科技有限公司 + - 540、杭州惠合信息科技有限公司 + - 541、厦门爱立得科技有限公司 + - 542、成都拟合未来科技有限公司 + - 543、宁波聚臻智能科技有限公司 + - 544、广东百慧科技有限公司 + - 545、笨马网络 + - 546、深圳市信安数字科技有限公司 + - 547、深圳市思乐数据技术有限公司 + - 548、四川绿源集科技有限公司 + - 549、湖南云医链生物科技有限公司 + - 550、杭州源诚科技有限公司 + - 551、北京开课吧科技有限公司 + - 552、北京多来点信息技术有限公司 + - 553、JEECG BOOT低代码开发平台 + - 554、苏州同元软控信息技术有限公司 + - 555、江苏大泰信息技术有限公司 + - 556、北京大禹汇智 + - 557、北京盛哲科技有限公司 + - 558、广州钛动科技有限公司 + - 559、北京大禹汇智科技有限公司 + - 560、湖南鼎翰文化股份有限公司 + - 561、苏州安软信息科技有限公司 + - 562、芒果tv + - 563、上海艺赛旗软件股份有限公司 + - 564、中盈优创资讯科技有限公司 + - 565、乐乎公寓 + - 566、启明信息 + - 567、苏州安软 + - 568、南京富金的软件科技有限公司 + - 569、深圳市新科聚合网络技术有限公司 + - 570、你好现在(北京)科技股份有限公司 + - 571、360考试宝典 + - 572、北京一零科技有限公司 + - 573、厦门星纵信息 + - 574、Dalligent Solusi Indonesia + - 575、深圳华普物联科技有限公司 + - 576、深圳行健自动化股份有限公司 + - 577、深圳市富融信息科技服务有限公司 + - 578、蓝鸟云 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 57b5d713..2ef4e750 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -651,6 +651,27 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 555、江苏大泰信息技术有限公司 - 556、北京大禹汇智 - 557、北京盛哲科技有限公司 + - 558、广州钛动科技有限公司 + - 559、北京大禹汇智科技有限公司 + - 560、湖南鼎翰文化股份有限公司 + - 561、苏州安软信息科技有限公司 + - 562、芒果tv + - 563、上海艺赛旗软件股份有限公司 + - 564、中盈优创资讯科技有限公司 + - 565、乐乎公寓 + - 566、启明信息 + - 567、苏州安软 + - 568、南京富金的软件科技有限公司 + - 569、深圳市新科聚合网络技术有限公司 + - 570、你好现在(北京)科技股份有限公司 + - 571、360考试宝典 + - 572、北京一零科技有限公司 + - 573、厦门星纵信息 + - 574、Dalligent Solusi Indonesia + - 575、深圳华普物联科技有限公司 + - 576、深圳行健自动化股份有限公司 + - 577、深圳市富融信息科技服务有限公司 + - 578、蓝鸟云 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 @@ -2263,7 +2284,7 @@ public void execute() { - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 - 3、【优化】[规划中]分片任务:全部完成后才会出发后置节点; -### 7.34 版本 v2.4.1 Release Notes[规划中] +### 7.34 新版本规划 [规划中] - 1、[规划中]DAG流程任务 - DAG任务:支持参数传递,共享数据:DAG任务创建、管理,DAG任务日志查看、操作; - 子任务:废弃 From 5b33264a91fee8c3801f06126e0fd28a5e3ecbd0 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 23 Mar 2023 15:17:52 +0800 Subject: [PATCH 18/24] upgrade version --- README.md | 25 +++++++++++++++++++++++++ doc/XXL-JOB官方文档.md | 25 +++++++++++++++++++++++++ pom.xml | 16 ++++++++-------- xxl-job-admin/pom.xml | 6 +++--- xxl-job-core/pom.xml | 2 +- 5 files changed, 62 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 08693b39..27bbf245 100644 --- a/README.md +++ b/README.md @@ -702,6 +702,31 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 576、深圳行健自动化股份有限公司 - 577、深圳市富融信息科技服务有限公司 - 578、蓝鸟云 + - 579、上海澎博财经资讯有限公司 + - 580、北京小鸦科技有限公司 + - 581、杭州盈泉云科技有限公司 + - 582、惟客数据 + - 583、GOSO香蜜闺秀 + - 584、普乐师(上海)数字科技有限公司 + - 585、西安市雁塔区咖北堂网络科技部 + - 586、宁波聚臻智能科技有限公司 + - 587、普乐师数字科技有限公司 + - 588、江苏蟹联网科技有限公司 + - 589、杭州未智科技有限公司 + - 590、安吉智行物流有限公司 + - 591、华生大家居集团有限公司 + - 592、美心食品(广州)有限公司 + - 593、货拉拉【货拉拉APP】 + - 594、杭州思韬瑞科技有限公司 + - 595、杭州玖融科技有限公司 + - 596、北京优海网络科技有限公司 + - 597、浙江大维高新技术股份有限公司 + - 598、粤港澳大湾区数字经济研究院 + - 599、普康(杭州)健康科技有限公司 + - 600、华西证券股份有限公司【华西证券】 + - 601、杭州海康机器人股份有限公司【海康】 + - 602、河南宸邦信息技术有限公司 + - 603、成都次元节点网络科技有限公司 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 2ef4e750..9e53f0b3 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -672,6 +672,31 @@ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅 - 576、深圳行健自动化股份有限公司 - 577、深圳市富融信息科技服务有限公司 - 578、蓝鸟云 + - 579、上海澎博财经资讯有限公司 + - 580、北京小鸦科技有限公司 + - 581、杭州盈泉云科技有限公司 + - 582、惟客数据 + - 583、GOSO香蜜闺秀 + - 584、普乐师(上海)数字科技有限公司 + - 585、西安市雁塔区咖北堂网络科技部 + - 586、宁波聚臻智能科技有限公司 + - 587、普乐师数字科技有限公司 + - 588、江苏蟹联网科技有限公司 + - 589、杭州未智科技有限公司 + - 590、安吉智行物流有限公司 + - 591、华生大家居集团有限公司 + - 592、美心食品(广州)有限公司 + - 593、货拉拉【货拉拉APP】 + - 594、杭州思韬瑞科技有限公司 + - 595、杭州玖融科技有限公司 + - 596、北京优海网络科技有限公司 + - 597、浙江大维高新技术股份有限公司 + - 598、粤港澳大湾区数字经济研究院 + - 599、普康(杭州)健康科技有限公司 + - 600、华西证券股份有限公司【华西证券】 + - 601、杭州海康机器人股份有限公司【海康】 + - 602、河南宸邦信息技术有限公司 + - 603、成都次元节点网络科技有限公司 - …… > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 diff --git a/pom.xml b/pom.xml index a4cdc76b..aee686fe 100644 --- a/pom.xml +++ b/pom.xml @@ -25,22 +25,22 @@ true 4.1.63.Final - 2.9.0 + 2.10.1 - 5.3.20 - 2.6.7 + 5.3.26 + 2.7.9 - 2.2.2 - 8.0.29 + 2.3.0 + 8.0.32 1.7.36 - 5.8.2 + 5.9.2 1.3.2 - 3.0.10 + 4.0.10 3.2.1 - 3.4.0 + 3.5.0 3.0.1 diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index d1eb7952..0878466b 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -61,9 +61,9 @@ - mysql - mysql-connector-java - ${mysql-connector-java.version} + com.mysql + mysql-connector-j + ${mysql-connector-j.version} diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index 92ebf731..5ade46b9 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -30,7 +30,7 @@ - org.codehaus.groovy + org.apache.groovy groovy ${groovy.version} From 4cd8636b7d5984071839c33ca3f369cad5d63969 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 23 Mar 2023 17:30:17 +0800 Subject: [PATCH 19/24] reduce dependence --- pom.xml | 2 +- xxl-job-core/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index aee686fe..8fdeff52 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 1.8 true - 4.1.63.Final + 4.1.90.Final 2.10.1 5.3.26 diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index 5ade46b9..bbaccd5a 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -18,8 +18,8 @@ io.netty - netty-all - ${netty-all.version} + netty-codec-http + ${netty.version} com.google.code.gson From 730c1066b80e8ab44503ed34ced19ef8e0471fec Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 23 Mar 2023 18:00:05 +0800 Subject: [PATCH 20/24] =?UTF-8?q?"CVE-2022-36157"=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 13 ++++++++----- .../job/admin/controller/JobGroupController.java | 7 +++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 9e53f0b3..1d40d06c 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2303,11 +2303,9 @@ public void execute() { ### 7.33 版本 v2.4.0 Release Notes[规划中] - 1、【优化】执行器任务Bean扫描逻辑优化:解决懒加载注解失效问题。 -- 2、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - - 普通任务:只记录一条主任务; - - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 -- 3、【优化】[规划中]分片任务:全部完成后才会出发后置节点; +- 2、【优化】多个项目依赖升级至较新稳定版本,涉及netty、groovy、spring、springboot、mybatis等; +- 3、【修复】"CVE-2022-36157"授权漏洞修复。 + ### 7.34 新版本规划 [规划中] - 1、[规划中]DAG流程任务 @@ -2317,6 +2315,11 @@ public void execute() { - 3、[规划中]告警增强:邮件告警 + webhook告警; - 4、[规划中]安全强化:AccessToken动态生成、动态启停;控制调度、回调; - 5、[规划中]任务导入导出工具,灵活支持版本升级、迁移等场景。 +- 6、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 + - 普通任务:只记录一条主任务; + - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; + - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 +- 7、【优化】[规划中]分片任务:全部完成后才会出发后置节点; ### TODO LIST - 1、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java index 4bb4b90a..8e0c5a4d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.controller; +import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.core.util.I18nUtil; @@ -34,12 +35,14 @@ public class JobGroupController { private XxlJobRegistryDao xxlJobRegistryDao; @RequestMapping + @PermissionLimit(adminuser = true) public String index(Model model) { return "jobgroup/jobgroup.index"; } @RequestMapping("/pageList") @ResponseBody + @PermissionLimit(adminuser = true) public Map pageList(HttpServletRequest request, @RequestParam(required = false, defaultValue = "0") int start, @RequestParam(required = false, defaultValue = "10") int length, @@ -59,6 +62,7 @@ public class JobGroupController { @RequestMapping("/save") @ResponseBody + @PermissionLimit(adminuser = true) public ReturnT save(XxlJobGroup xxlJobGroup){ // valid @@ -102,6 +106,7 @@ public class JobGroupController { @RequestMapping("/update") @ResponseBody + @PermissionLimit(adminuser = true) public ReturnT update(XxlJobGroup xxlJobGroup){ // valid if (xxlJobGroup.getAppname()==null || xxlJobGroup.getAppname().trim().length()==0) { @@ -170,6 +175,7 @@ public class JobGroupController { @RequestMapping("/remove") @ResponseBody + @PermissionLimit(adminuser = true) public ReturnT remove(int id){ // valid @@ -189,6 +195,7 @@ public class JobGroupController { @RequestMapping("/loadById") @ResponseBody + @PermissionLimit(adminuser = true) public ReturnT loadById(int id){ XxlJobGroup jobGroup = xxlJobGroupDao.load(id); return jobGroup!=null?new ReturnT(jobGroup):new ReturnT(ReturnT.FAIL_CODE, null); From 9293c61ca0a8d54afdfb27cc568885ae639a14dc Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 23 Mar 2023 18:49:27 +0800 Subject: [PATCH 21/24] =?UTF-8?q?"CVE-2022-43183"=20SSRF=E6=BC=8F=E6=B4=9E?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 3 ++- .../job/admin/controller/JobLogController.java | 18 +++++++++++------- .../resources/static/js/joblog.detail.1.js | 2 -- .../templates/joblog/joblog.detail.ftl | 2 -- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 1d40d06c..ecad4c34 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2304,7 +2304,8 @@ public void execute() { ### 7.33 版本 v2.4.0 Release Notes[规划中] - 1、【优化】执行器任务Bean扫描逻辑优化:解决懒加载注解失效问题。 - 2、【优化】多个项目依赖升级至较新稳定版本,涉及netty、groovy、spring、springboot、mybatis等; -- 3、【修复】"CVE-2022-36157"授权漏洞修复。 +- 3、【修复】"CVE-2022-36157" 授权漏洞修复。 +- 4、【修复】"CVE-2022-43183" SSRF漏洞修复。 ### 7.34 新版本规划 [规划中] diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java index dcf5bb83..67faebcc 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java @@ -1,7 +1,7 @@ package com.xxl.job.admin.controller; -import com.xxl.job.admin.core.exception.XxlJobException; import com.xxl.job.admin.core.complete.XxlJobCompleter; +import com.xxl.job.admin.core.exception.XxlJobException; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobLog; @@ -129,22 +129,26 @@ public class JobLogController { model.addAttribute("triggerCode", jobLog.getTriggerCode()); model.addAttribute("handleCode", jobLog.getHandleCode()); - model.addAttribute("executorAddress", jobLog.getExecutorAddress()); - model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime()); model.addAttribute("logId", jobLog.getId()); return "joblog/joblog.detail"; } @RequestMapping("/logDetailCat") @ResponseBody - public ReturnT logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum){ + public ReturnT logDetailCat(long logId, int fromLineNum){ try { - ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress); - ReturnT logResult = executorBiz.log(new LogParam(triggerTime, logId, fromLineNum)); + // valid + XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve performance + if (jobLog == null) { + return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid")); + } + + // log cat + ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress()); + ReturnT logResult = executorBiz.log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum)); // is end if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) { - XxlJobLog jobLog = xxlJobLogDao.load(logId); if (jobLog.getHandleCode() > 0) { logResult.getContent().setEnd(true); } diff --git a/xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js b/xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js index ddefd466..0638eee2 100644 --- a/xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js +++ b/xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js @@ -25,8 +25,6 @@ $(function() { async: false, // sync, make log ordered url : base_url + '/joblog/logDetailCat', data : { - "executorAddress":executorAddress, - "triggerTime":triggerTime, "logId":logId, "fromLineNum":fromLineNum }, diff --git a/xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl b/xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl index 3881cfa6..bb8072f9 100644 --- a/xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl +++ b/xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl @@ -62,8 +62,6 @@ // 参数 var triggerCode = '${triggerCode}'; var handleCode = '${handleCode}'; - var executorAddress = '${executorAddress!}'; - var triggerTime = '${triggerTime?c}'; var logId = '${logId}'; From 0f867352fa6cdc618e12d2219885788cf9a14695 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 23 Mar 2023 19:53:18 +0800 Subject: [PATCH 22/24] =?UTF-8?q?=E5=8D=87=E7=BA=A7=20v2.4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 2 +- doc/db/tables_xxl_job.sql | 2 +- pom.xml | 2 +- xxl-job-admin/pom.xml | 2 +- xxl-job-admin/src/main/resources/i18n/message_en.properties | 2 +- xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties | 2 +- xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties | 2 +- xxl-job-core/pom.xml | 2 +- xxl-job-executor-samples/pom.xml | 2 +- .../xxl-job-executor-sample-frameless/pom.xml | 2 +- .../xxl-job-executor-sample-springboot/pom.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index ecad4c34..1d4c274e 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2301,7 +2301,7 @@ public void execute() { - 4、【优化】合并多项PR,项目代码结构、健壮性优化:PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、PR-2591。 - 5、【优化】任务线程名优化,提升可读性与问题定位效率(ISSUE-2527)。 -### 7.33 版本 v2.4.0 Release Notes[规划中] +### 7.33 版本 v2.4.0 Release Notes[2022-03-23] - 1、【优化】执行器任务Bean扫描逻辑优化:解决懒加载注解失效问题。 - 2、【优化】多个项目依赖升级至较新稳定版本,涉及netty、groovy、spring、springboot、mybatis等; - 3、【修复】"CVE-2022-36157" 授权漏洞修复。 diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 33dbb0c1..eaf2f01c 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -1,5 +1,5 @@ # -# XXL-JOB v2.4.0-SNAPSHOT +# XXL-JOB v2.4.0 # Copyright (c) 2015-present, xuxueli. CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; diff --git a/pom.xml b/pom.xml index 8fdeff52..66223a90 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.xuxueli xxl-job - 2.4.0-SNAPSHOT + 2.4.0 pom ${project.artifactId} diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index 0878466b..0d9c4da4 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.4.0-SNAPSHOT + 2.4.0 xxl-job-admin jar diff --git a/xxl-job-admin/src/main/resources/i18n/message_en.properties b/xxl-job-admin/src/main/resources/i18n/message_en.properties index 2e91fd69..589d9eb4 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_en.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties @@ -1,6 +1,6 @@ admin_name=Scheduling Center admin_name_full=Distributed Task Scheduling Platform XXL-JOB -admin_version=2.4.0-SNAPSHOT +admin_version=2.4.0 admin_i18n=en ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties index 7891570d..fc1d2764 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties @@ -1,6 +1,6 @@ admin_name=任务调度中心 admin_name_full=分布式任务调度平台XXL-JOB -admin_version=2.4.0-SNAPSHOT +admin_version=2.4.0 admin_i18n= ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties index c61994d1..49d39fd2 100755 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties @@ -1,6 +1,6 @@ admin_name=任務調度中心 admin_name_full=分布式任務調度平臺XXL-JOB -admin_version=2.4.0-SNAPSHOT +admin_version=2.4.0 admin_i18n= ## system diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index bbaccd5a..c633ceae 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.4.0-SNAPSHOT + 2.4.0 xxl-job-core jar diff --git a/xxl-job-executor-samples/pom.xml b/xxl-job-executor-samples/pom.xml index 11187b8b..46ec8851 100644 --- a/xxl-job-executor-samples/pom.xml +++ b/xxl-job-executor-samples/pom.xml @@ -5,7 +5,7 @@ com.xuxueli xxl-job - 2.4.0-SNAPSHOT + 2.4.0 xxl-job-executor-samples pom diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml index 7972677b..79072de9 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.4.0-SNAPSHOT + 2.4.0 xxl-job-executor-sample-frameless jar diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml index 9175792a..c661b0d9 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.4.0-SNAPSHOT + 2.4.0 xxl-job-executor-sample-springboot jar From 6effc8b98f0fd5b5af3a7b6a8995bdcf30de69fc Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 23 Mar 2023 20:43:48 +0800 Subject: [PATCH 23/24] upgrade v2.4.1 --- doc/XXL-JOB官方文档.md | 14 ++++++++------ doc/db/tables_xxl_job.sql | 2 +- pom.xml | 2 +- xxl-job-admin/pom.xml | 2 +- .../src/main/resources/i18n/message_en.properties | 2 +- .../main/resources/i18n/message_zh_CN.properties | 2 +- .../main/resources/i18n/message_zh_TC.properties | 2 +- xxl-job-core/pom.xml | 2 +- xxl-job-executor-samples/pom.xml | 2 +- .../xxl-job-executor-sample-frameless/pom.xml | 2 +- .../xxl-job-executor-sample-springboot/pom.xml | 2 +- 11 files changed, 18 insertions(+), 16 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 1d4c274e..e5ed9587 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2307,8 +2307,14 @@ public void execute() { - 3、【修复】"CVE-2022-36157" 授权漏洞修复。 - 4、【修复】"CVE-2022-43183" SSRF漏洞修复。 +### 7.34 版本 v2.4.1 Release Notes[规划中] +- 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 + - 普通任务:只记录一条主任务; + - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; + - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 +- 2、【优化】[规划中]分片任务:全部完成后才会出发后置节点; -### 7.34 新版本规划 [规划中] +### 7.35 新版本规划 [规划中] - 1、[规划中]DAG流程任务 - DAG任务:支持参数传递,共享数据:DAG任务创建、管理,DAG任务日志查看、操作; - 子任务:废弃 @@ -2316,11 +2322,7 @@ public void execute() { - 3、[规划中]告警增强:邮件告警 + webhook告警; - 4、[规划中]安全强化:AccessToken动态生成、动态启停;控制调度、回调; - 5、[规划中]任务导入导出工具,灵活支持版本升级、迁移等场景。 -- 6、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - - 普通任务:只记录一条主任务; - - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 -- 7、【优化】[规划中]分片任务:全部完成后才会出发后置节点; + ### TODO LIST - 1、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定; diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index eaf2f01c..9002d076 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -1,5 +1,5 @@ # -# XXL-JOB v2.4.0 +# XXL-JOB v2.4.1-SNAPSHOT # Copyright (c) 2015-present, xuxueli. CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; diff --git a/pom.xml b/pom.xml index 66223a90..a1ffaf2d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.xuxueli xxl-job - 2.4.0 + 2.4.1-SNAPSHOT pom ${project.artifactId} diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index 0d9c4da4..4d316707 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.4.0 + 2.4.1-SNAPSHOT xxl-job-admin jar diff --git a/xxl-job-admin/src/main/resources/i18n/message_en.properties b/xxl-job-admin/src/main/resources/i18n/message_en.properties index 589d9eb4..2ca59155 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_en.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties @@ -1,6 +1,6 @@ admin_name=Scheduling Center admin_name_full=Distributed Task Scheduling Platform XXL-JOB -admin_version=2.4.0 +admin_version=2.4.1-SNAPSHOT admin_i18n=en ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties index fc1d2764..dc00c697 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties @@ -1,6 +1,6 @@ admin_name=任务调度中心 admin_name_full=分布式任务调度平台XXL-JOB -admin_version=2.4.0 +admin_version=2.4.1-SNAPSHOT admin_i18n= ## system diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties index 49d39fd2..2152c298 100755 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties @@ -1,6 +1,6 @@ admin_name=任務調度中心 admin_name_full=分布式任務調度平臺XXL-JOB -admin_version=2.4.0 +admin_version=2.4.1-SNAPSHOT admin_i18n= ## system diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index c633ceae..a91472be 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 2.4.0 + 2.4.1-SNAPSHOT xxl-job-core jar diff --git a/xxl-job-executor-samples/pom.xml b/xxl-job-executor-samples/pom.xml index 46ec8851..4f98415e 100644 --- a/xxl-job-executor-samples/pom.xml +++ b/xxl-job-executor-samples/pom.xml @@ -5,7 +5,7 @@ com.xuxueli xxl-job - 2.4.0 + 2.4.1-SNAPSHOT xxl-job-executor-samples pom diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml index 79072de9..500cdb48 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.4.0 + 2.4.1-SNAPSHOT xxl-job-executor-sample-frameless jar diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml index c661b0d9..c0570081 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 2.4.0 + 2.4.1-SNAPSHOT xxl-job-executor-sample-springboot jar From 584e2f6edcb27c38fa54abd8f2814bcff4f06dbe Mon Sep 17 00:00:00 2001 From: "yong.li07" Date: Tue, 4 Jul 2023 09:16:23 +0800 Subject: [PATCH 24/24] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=9A=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E4=BB=BB=E5=8A=A1=E5=9D=87=E6=91=8A=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job.sql | 14 +- .../admin/core/conf/XxlJobAdminConfig.java | 54 +++++++ .../job/admin/core/model/XxlJobCluster.java | 26 +++ .../xxl/job/admin/core/model/XxlJobInfo.java | 20 +++ .../admin/core/thread/JobRegistryHelper.java | 31 ++++ .../admin/core/thread/JobScheduleHelper.java | 23 ++- .../xxl/job/admin/dao/XxlJobClusterDao.java | 20 +++ .../com/xxl/job/admin/dao/XxlJobInfoDao.java | 13 +- .../xxl/job/admin/service/JobAllocation.java | 25 +++ .../service/impl/AverageJobAllocation.java | 150 ++++++++++++++++++ .../admin/service/impl/XxlJobServiceImpl.java | 2 + .../src/main/resources/application.properties | 4 + .../mybatis-mapper/XxlJobClusterMapper.xml | 17 ++ .../mybatis-mapper/XxlJobInfoMapper.xml | 41 ++++- .../service/jobhandler/SampleXxlJob.java | 1 + 15 files changed, 436 insertions(+), 5 deletions(-) create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobCluster.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobClusterDao.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/service/JobAllocation.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AverageJobAllocation.java create mode 100644 xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobClusterMapper.xml diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 9002d076..ae61bd0a 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -32,7 +32,11 @@ CREATE TABLE `xxl_job_info` ( `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间', `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间', - PRIMARY KEY (`id`) + `host_name` varchar(100) NOT NULL DEFAULT '' COMMENT '实例名', + `lock_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '锁状态:1-改任务锁定中 0-未锁定', + PRIMARY KEY (`id`), + KEY `idx_host_name` (`host_name`), + KEY `idx_lock` (`lock_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_log` ( @@ -113,10 +117,18 @@ CREATE TABLE `xxl_job_lock` ( PRIMARY KEY (`lock_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `xxl_job_cluster`( + `host_name` varchar(100) NOT NULL COMMENT '实例名', + `update_time` datetime DEFAULT NULL comment '更新时间', + PRIMARY KEY (`host_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' ); INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); +INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'flush_lock'); + commit; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java index 380b8a59..698bfad1 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java @@ -1,8 +1,13 @@ package com.xxl.job.admin.core.conf; import com.xxl.job.admin.core.alarm.JobAlarmer; +import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.dao.*; +import com.xxl.job.admin.service.JobAllocation; +import com.xxl.job.admin.service.impl.AverageJobAllocation; +import com.xxl.job.core.util.IpUtil; +import io.micrometer.core.instrument.util.StringUtils; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; @@ -36,8 +41,11 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { public void afterPropertiesSet() throws Exception { adminConfig = this; + getJobAllocation().init(true); xxlJobScheduler = new XxlJobScheduler(); xxlJobScheduler.init(); + getJobAllocation().flush(); + } @Override @@ -67,6 +75,16 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { @Value("${xxl.job.logretentiondays}") private int logretentiondays; + + @Value("${xxl.job.cluster.host.name}") + private String hostName; + + @Value("${server.port}") + private int port; + + @Value("${xxl.job.cluster.enable:false}") + private boolean clusterEnable; + // dao, service @Resource @@ -79,6 +97,9 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { private XxlJobGroupDao xxlJobGroupDao; @Resource private XxlJobLogReportDao xxlJobLogReportDao; + + @Resource + private XxlJobClusterDao xxlJobClusterDao; @Resource private JavaMailSender mailSender; @Resource @@ -86,6 +107,23 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { @Resource private JobAlarmer jobAlarmer; + private JobAllocation jobAllocation = defaultJobAllocation; + + public String getHostName() { + return StringUtils.isBlank(hostName) ? IpUtil.getIpPort(port) : hostName; + } + + + private static JobAllocation defaultJobAllocation = new JobAllocation() { + @Override + public void allocation(XxlJobInfo jobInfo) { + } + + @Override + public void init(boolean init) { + } + }; + public String getI18n() { if (!Arrays.asList("zh_CN", "zh_TC", "en").contains(i18n)) { @@ -155,4 +193,20 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { return jobAlarmer; } + public XxlJobClusterDao getXxlJobClusterDao() { + return xxlJobClusterDao; + } + + public JobAllocation getJobAllocation() { + return jobAllocation.equals(defaultJobAllocation) && clusterEnable ? new AverageJobAllocation() : defaultJobAllocation; + } + + public void setJobAllocation(JobAllocation jobAllocation) { + this.jobAllocation = jobAllocation; + } + + public boolean isClusterEnable() { + return clusterEnable; + } + } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobCluster.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobCluster.java new file mode 100644 index 00000000..4a7c2fb6 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobCluster.java @@ -0,0 +1,26 @@ +package com.xxl.job.admin.core.model; + +import java.util.Date; + +public class XxlJobCluster { + + private String hostName; + + private Date updateTime; + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java index e47b6dc6..0af4f663 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java @@ -42,6 +42,10 @@ public class XxlJobInfo { private long triggerLastTime; // 上次调度时间 private long triggerNextTime; // 下次调度时间 + private String hostName; // 运行实例名称 + + private int lockStatus; + public int getId() { return id; @@ -234,4 +238,20 @@ public class XxlJobInfo { public void setTriggerNextTime(long triggerNextTime) { this.triggerNextTime = triggerNextTime; } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public int getLockStatus() { + return lockStatus; + } + + public void setLockStatus(int lockStatus) { + this.lockStatus = lockStatus; + } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java index 37edfd98..2fd76761 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java @@ -2,10 +2,12 @@ package com.xxl.job.admin.core.thread; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.model.XxlJobGroup; +import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.enums.RegistryConfig; +import com.xxl.job.core.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; @@ -29,6 +31,13 @@ public class JobRegistryHelper { private Thread registryMonitorThread; private volatile boolean toStop = false; + private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "cluster host registry"); + } + }); + public void start(){ // for registry or remove @@ -126,6 +135,28 @@ public class JobRegistryHelper { registryMonitorThread.setDaemon(true); registryMonitorThread.setName("xxl-job, admin JobRegistryMonitorHelper-registryMonitorThread"); registryMonitorThread.start(); + + this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + try { + XxlJobAdminConfig.getAdminConfig().getXxlJobClusterDao().replace(XxlJobAdminConfig.getAdminConfig().getHostName()); + + Date date = new Date(); + + XxlJobAdminConfig.getAdminConfig().getXxlJobClusterDao().delete(DateUtil.addMinutes(date,-5)); + + XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().findOldClusterInfo(); + if(jobInfo!=null){ + XxlJobAdminConfig.getAdminConfig().getJobAllocation().init(false); + XxlJobAdminConfig.getAdminConfig().getJobAllocation().flush(); + } + } catch (Exception e) { + logger.error("ScheduledTask fetchNameServerAddr exception", e); + } + } + }, 0, 1000 * 30, TimeUnit.MILLISECONDS); } public void toStop(){ 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 831bcf6a..daba04ff 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 @@ -15,6 +15,7 @@ import java.sql.SQLException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @author xuxueli 2019-05-21 @@ -77,8 +78,25 @@ public class JobScheduleHelper { // 1、pre read long nowTime = System.currentTimeMillis(); - List scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount); - if (scheduleList!=null && scheduleList.size()>0) { + List scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount + , XxlJobAdminConfig.getAdminConfig().getHostName(), + XxlJobAdminConfig.getAdminConfig().isClusterEnable()); + if (scheduleList!=null && !scheduleList.isEmpty()) { + + if(XxlJobAdminConfig.getAdminConfig().isClusterEnable()) { + XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().updateStatusById(scheduleList.stream() + .map(XxlJobInfo::getId).collect(Collectors.toList())); + + try { + conn.commit(); + } catch (SQLException e) { + if (!scheduleThreadToStop) { + logger.error(e.getMessage(), e); + } + } + } + + // 2、push time-ring for (XxlJobInfo jobInfo: scheduleList) { @@ -140,6 +158,7 @@ public class JobScheduleHelper { // 3、update trigger info for (XxlJobInfo jobInfo: scheduleList) { + jobInfo.setLockStatus(0); XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobClusterDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobClusterDao.java new file mode 100644 index 00000000..3d93c4e0 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobClusterDao.java @@ -0,0 +1,20 @@ +package com.xxl.job.admin.dao; + +import com.xxl.job.admin.core.model.XxlJobCluster; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * @author liyong + */ +@Mapper +public interface XxlJobClusterDao { + void replace(@Param("ip") String ip); + + List findAll(); + + void delete(@Param("time") Date date); +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java index d640efff..8adaca5b 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java @@ -41,9 +41,20 @@ public interface XxlJobInfoDao { public int findAllCount(); - public List scheduleJobQuery(@Param("maxNextTime") long maxNextTime, @Param("pagesize") int pagesize ); + public List scheduleJobQuery(@Param("maxNextTime") long maxNextTime, @Param("pagesize") int pagesize, + @Param("hostName") String ip,@Param("clusterEnable") boolean clusterEnable); public int scheduleUpdate(XxlJobInfo xxlJobInfo); + void updateStatusById(@Param("list") List collect); + + List pageById(@Param("id") Integer id); + + void updateHostNameByIds(@Param("hostName") String k, @Param("ids") List v); + + void initLockStatus(@Param("hostName") String hostName,@Param("init") boolean init); + + XxlJobInfo findOldClusterInfo(); + } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/JobAllocation.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/JobAllocation.java new file mode 100644 index 00000000..1ad6dc2e --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/JobAllocation.java @@ -0,0 +1,25 @@ +package com.xxl.job.admin.service; + +import com.xxl.job.admin.core.model.XxlJobInfo; + +/** + * @author liyong + */ +public interface JobAllocation { + + /** + * 计算单个任务的分配 + * @param jobInfo + */ + default void allocation(XxlJobInfo jobInfo){} + + /** + * 用于节点起来的时候 重新计算任务的分配 + */ + default void flush(){} + + /** + * 启动初始化相关动作 + */ + default void init(boolean init){} +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AverageJobAllocation.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AverageJobAllocation.java new file mode 100644 index 00000000..4f8c15d6 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AverageJobAllocation.java @@ -0,0 +1,150 @@ +package com.xxl.job.admin.service.impl; + +import com.xxl.job.admin.core.conf.XxlJobAdminConfig; +import com.xxl.job.admin.core.model.XxlJobCluster; +import com.xxl.job.admin.core.model.XxlJobInfo; +import com.xxl.job.admin.service.JobAllocation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @author liyong + */ +public class AverageJobAllocation implements JobAllocation { + + private static Logger logger = LoggerFactory.getLogger(AverageJobAllocation.class); + + + private static int oneMinute = 60; + private static int tenMinutes = oneMinute * 10; + private static int oneHour = tenMinutes * 6; + private static int oneDay = oneHour * 24; + + private Map averageMap = new ConcurrentHashMap<>(); + private Map> ipMap = new ConcurrentHashMap<>(); + + { + // 防止执行频率高的 扎堆在一起 + averageMap.put(oneMinute, new AtomicInteger(0)); + averageMap.put(tenMinutes, new AtomicInteger(0)); + averageMap.put(oneHour, new AtomicInteger(0)); + averageMap.put(oneDay, new AtomicInteger(0)); + averageMap.put(Integer.MAX_VALUE, new AtomicInteger(0)); + } + + @Override + public void allocation(XxlJobInfo jobInfo) { + List all = XxlJobAdminConfig.getAdminConfig().getXxlJobClusterDao().findAll(); + List ipList = all.stream().filter(x -> x.getUpdateTime().getTime() > System.currentTimeMillis() - 60 * 1000) + .map(XxlJobCluster::getHostName).collect(Collectors.toList()); + + if (ipList.isEmpty()) { + jobInfo.setHostName(XxlJobAdminConfig.getAdminConfig().getHostName()); + return; + } + + Integer key = getKey(jobInfo.getTriggerNextTime() - System.currentTimeMillis()); + int i = averageMap.get(key).incrementAndGet(); + + jobInfo.setHostName(ipList.get(i % ipList.size())); + + } + + @Override + public void init(boolean init) { + XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().initLockStatus(XxlJobAdminConfig.getAdminConfig().getHostName(),init); + } + + @Override + public void flush() { + Connection conn = null; + Boolean connAutoCommit = null; + PreparedStatement preparedStatement = null; + + try { + conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection(); + connAutoCommit = conn.getAutoCommit(); + conn.setAutoCommit(false); + + preparedStatement = conn.prepareStatement("select * from xxl_job_lock where lock_name = 'flush_lock' for update"); + preparedStatement.execute(); + + recursion(0, conn); + } catch (Exception e) { + logger.error(">>>>>>>>>>> xxl-job, cluster flush error:{}", e); + } finally { + // commit + if (conn != null) { + try { + conn.commit(); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + try { + conn.setAutoCommit(connAutoCommit); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + try { + conn.close(); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + } + + // close PreparedStatement + if (null != preparedStatement) { + try { + preparedStatement.close(); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + } + } + } + + private void recursion(int id, Connection conn) { + List list = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().pageById(id); + if (CollectionUtils.isEmpty(list)) + return; + Map> map = new HashMap<>(); + list.forEach(x -> { + allocation(x); + List ids = map.getOrDefault(x.getHostName(), new ArrayList<>()); + ids.add(x.getId()); + map.put(x.getHostName(), ids); + }); + map.forEach((k, v) -> XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().updateHostNameByIds(k, v)); + try { + conn.commit(); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + recursion(list.get(list.size() - 1).getId(), conn); + } + + private Integer getKey(long time) { + if (time < oneMinute) { + return oneMinute; + } else if (time < tenMinutes) { + return tenMinutes; + } else if (time < oneHour) { + return oneHour; + } else if (time < oneDay) { + return oneDay; + } else { + return Integer.MAX_VALUE; + } + } + +} + diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java index 530ee41c..1f5cae91 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.service.impl; +import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.cron.CronExpression; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobInfo; @@ -328,6 +329,7 @@ public class XxlJobServiceImpl implements XxlJobService { xxlJobInfo.setTriggerNextTime(nextTriggerTime); xxlJobInfo.setUpdateTime(new Date()); + XxlJobAdminConfig.getAdminConfig().getJobAllocation().allocation(xxlJobInfo); xxlJobInfoDao.update(xxlJobInfo); return ReturnT.SUCCESS; } diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index 8727b6c7..810e4f40 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -63,3 +63,7 @@ xxl.job.triggerpool.slow.max=100 ### xxl-job, log retention days xxl.job.logretentiondays=30 + +### xxl-job cluster +xxl.job.cluster.host.name= +xxl.job.cluster.enable=true diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobClusterMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobClusterMapper.xml new file mode 100644 index 00000000..5bbd8c63 --- /dev/null +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobClusterMapper.xml @@ -0,0 +1,17 @@ + + + + + + replace into xxl_job_cluster values(#{ip}, now()); + + + delete from xxl_job_cluster where update_time <= #{time} + + + + + \ No newline at end of file diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml index 7b3c3a3e..764282f2 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml @@ -36,6 +36,9 @@ + + + @@ -224,6 +227,10 @@ FROM xxl_job_info AS t WHERE t.trigger_status = 1 and t.trigger_next_time #{maxNextTime} + + and t.host_name=#{hostName} + and t.lock_status=0 + ORDER BY id ASC LIMIT #{pagesize} @@ -233,8 +240,40 @@ SET trigger_last_time = #{triggerLastTime}, trigger_next_time = #{triggerNextTime}, - trigger_status = #{triggerStatus} + trigger_status = #{triggerStatus}, + lock_status=#{lockStatus} WHERE id = #{id} + + + + update xxl_job_info set lock_status = 1 + where id in + + #{id} + + + + update xxl_job_info set host_name = #{hostName} + where id in + + #{id} + + + + update xxl_job_info a left join xxl_job_cluster b on a.host_name =b.host_name and b.update_time>=DATE_SUB(now(),INTERVAL 1 MINUTE) + set a.lock_status = 0 + where (b.host_name is null + + or a.host_name =#{hostName} + + ) and a.lock_status=1 + \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java index 759d6625..865543ab 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java @@ -36,6 +36,7 @@ public class SampleXxlJob { */ @XxlJob("demoJobHandler") public void demoJobHandler() throws Exception { + logger.info(XxlJobHelper.getJobParam()); XxlJobHelper.log("XXL-JOB, Hello World."); for (int i = 0; i < 5; i++) {