From 8d9f3cef175a6400e8e0d1642d84829489ef6ecb Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 18 Jan 2025 16:45:00 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E5=91=BD=E4=BB=A4=E8=A1=8C=E4=BB=BB=E5=8A=A1(?= =?UTF-8?q?=E2=80=9CcommandJobHandler=E2=80=9D)=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E5=8F=82=E6=95=B0=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=EF=BC=8C=E5=91=BD=E4=BB=A4=E5=8F=8A=E5=8F=82=E6=95=B0=E4=B9=8B?= =?UTF-8?q?=E9=97=B4=E9=80=9A=E8=BF=87=E7=A9=BA=E6=A0=BC=E9=9A=94=E5=BC=80?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E4=BB=BB=E5=8A=A1=E5=8F=82=E6=95=B0=20"ls=20?= =?UTF-8?q?la"=20=E6=88=96=20"pwd"=20=E5=B0=86=E4=BC=9A=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E5=B9=B6=E8=BE=93=E5=87=BA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 21 +++++++++---------- .../frameless/jobhandler/SampleXxlJob.java | 11 +++++++++- .../service/jobhandler/SampleXxlJob.java | 11 +++++++++- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 77264981..9d28f93c 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1172,13 +1172,12 @@ public void demoJobHandler() throws Exception { - demoJobHandler:简单示例任务,任务内部模拟耗时任务逻辑,用户可在线体验Rolling Log等功能; - shardingJobHandler:分片示例任务,任务内部模拟处理分片参数,可参考熟悉分片任务; - httpJobHandler:通用HTTP任务Handler;业务方只需要提供HTTP链接等信息即可,不限制语言、平台。示例任务入参如下: - ``` - url: http://www.xxx.com - method: get 或 post - data: post-data - ``` -- commandJobHandler:通用命令行任务Handler;业务方只需要提供命令行即可;如 “pwd”命令; - +``` +url: http://www.xxx.com +method: get 或 post +data: post-data +``` +- commandJobHandler:通用命令行任务Handler;业务方只需要提供命令行即可,命令及参数之间通过空格隔开;如任务参数 "ls la" 或 "pwd" 将会执行命令并输出数据; ### 3.3 GLUE模式(Java) 任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下: @@ -1655,8 +1654,8 @@ docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin 针对上述情况,可以通过结合 "单机路由策略(如:第一台、一致性哈希)" + "阻塞策略(如:单机串行、丢弃后续调度)" 来规避,最终避免任务重复执行。 ### 5.21 命令行任务 -原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可; -如任务参数 "pwd" 将会执行命令并输出数据; +原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可,命令及参数之间通过空格隔开; +如任务参数 "ls la" 或 "pwd" 将会执行命令并输出数据; ### 5.22 日志自动清理 XXL-JOB日志主要包含如下两部分,均支持日志自动清理,说明如下: @@ -2443,8 +2442,8 @@ public void execute() { - 1、【升级】调度中心升级至 SpringBoot3 + JDK17; - 2、【升级】Docker镜像升级,镜像构建基于JDK17(openjdk:17-jdk-slim); - 3、【优化】IP获取逻辑优化,优先遍历网卡来获取可用IP; -- 4、[规划中]登陆态Token生成逻辑优化,混淆登陆时间属性,降低token泄漏风险; - +- 4、【优化】通用命令行任务(“commandJobHandler”)优化,支持多参数执行,命令及参数之间通过空格隔开,如任务参数 "ls la" 或 "pwd" 将会执行命令并输出数据; +- 5、[规划中]登陆态Token生成逻辑优化,混淆登陆时间属性,降低token泄漏风险; ### TODO LIST - 1、调度隔离:调度中心针对不同执行器,各自维护不同的调度和远程触发组件。 diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java index a4eefd14..49e54f6e 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java +++ b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java @@ -78,9 +78,18 @@ public class SampleXxlJob { BufferedReader bufferedReader = null; try { + // valid + if (command==null || command.trim().length()==0) { + XxlJobHelper.handleFail("command empty."); + return; + } + + // command split + String[] commandArray = command.split(" "); + // command process ProcessBuilder processBuilder = new ProcessBuilder(); - processBuilder.command(command); + processBuilder.command(commandArray); processBuilder.redirectErrorStream(true); Process process = processBuilder.start(); 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..28e2606c 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 @@ -80,9 +80,18 @@ public class SampleXxlJob { BufferedReader bufferedReader = null; try { + // valid + if (command==null || command.trim().length()==0) { + XxlJobHelper.handleFail("command empty."); + return; + } + + // command split + String[] commandArray = command.split(" "); + // command process ProcessBuilder processBuilder = new ProcessBuilder(); - processBuilder.command(command); + processBuilder.command(commandArray); processBuilder.redirectErrorStream(true); Process process = processBuilder.start();