diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md
index f71b6982..1acbe454 100644
--- a/doc/XXL-JOB官方文档.md
+++ b/doc/XXL-JOB官方文档.md
@@ -791,11 +791,21 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
"分片广播" 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
-"分片广播" 和普通任务开发流程一致,不同之处在于可以可以获取分片参数,获取分片参数对象的代码如下(可参考Sample示例执行器中的示例任务"ShardingJobHandler" ):
+"分片广播" 和普通任务开发流程一致,不同之处在于可以可以获取分片参数,获取分片参数进行分片业务处理。
- ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
+- Java语言任务获取分片参数方式:BEAN、GLUE模式(Java)
+```
+// 可参考Sample示例执行器中的示例任务"ShardingJobHandler"了解试用
+ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
+```
+- 脚本语言任务获取分片参数方式:GLUE模式(Shell)、GLUE模式(Python)、GLUE模式(Nodejs)
+```
+// 脚本任务入参固定为三个,依次为:任务传参、分片序号、分片总数。以Shell模式任务为例,获取分片参数代码如下
+echo "分片序号 index = $2"
+echo "分片总数 total = $3"
+```
-该分片参数对象拥有两个属性:
+分片参数属性说明:
index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
total:总分片数,执行器集群的总机器数量;
@@ -1083,7 +1093,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 18、任务列表界面,左侧菜单合并时样式错乱问题修复;
- 19、执行器地址录入交互优化,地址长度扩展支持至512位,支持大规模执行器集群配置;
- 20、项目依赖升级,如spring、jackson等;
-
+- 21、任务参数“IJobHandler.execute”入参改为“String params”,增强入参通用性。
+- 22、脚本任务Shell、Python和Nodejs等支持获取分片参数;
### TODO LIST
- 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
@@ -1099,10 +1110,10 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 11、任务日志,记录发起调度的机器信息;
- 12、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态;
- 13、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;
-- 14、脚本任务 Shell、Python和Nodejs,如何友好获取分片参数;
-- 15、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
-- 16、任务告警邮件优化,调整为表格形式;
-- 17、执行器回调地址格式兼容,支持非"/"结尾路径配置;
+- 14、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
+- 15、任务告警邮件优化,调整为表格形式;
+- 16、执行器回调地址格式兼容,支持非"/"结尾路径配置;
+- 17、任务事件触发API服务优化,支持调用时动态传参;
## 七、其他
diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql
index dcc2bee8..f10c5f62 100644
--- a/doc/db/tables_xxl_job.sql
+++ b/doc/db/tables_xxl_job.sql
@@ -156,7 +156,7 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
- `executor_param` varchar(255) DEFAULT NULL COMMENT '执行器任务参数',
+ `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
`executor_fail_strategy` varchar(50) DEFAULT NULL COMMENT '失败处理策略',
`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
@@ -174,7 +174,7 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
- `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
+ `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
`trigger_code` varchar(255) NOT NULL DEFAULT '0' COMMENT '调度-结果',
`trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',
diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
index 797d5909..537baeb3 100644
--- a/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
+++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
@@ -143,7 +143,7 @@
@@ -192,7 +192,7 @@ import com.xxl.job.core.handler.IJobHandler;
public class DemoGlueJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
return ReturnT.SUCCESS;
}
@@ -300,7 +300,7 @@ process.exit(0)
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java
index 64b2f97b..424b026e 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java
@@ -21,11 +21,11 @@ public abstract class IJobHandler {
/**
* execute handler
*
- * @param params
+ * @param param
* @return
* @throws Exception
*/
- public abstract ReturnT execute(String... params) throws Exception;
+ public abstract ReturnT execute(String param) throws Exception;
/**
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java
index a0539fd8..3dc91a22 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java
@@ -21,9 +21,9 @@ public class GlueJobHandler extends IJobHandler {
}
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
XxlJobLogger.log("----------- glue.version:"+ glueUpdatetime +" -----------");
- return jobHandler.execute(params);
+ return jobHandler.execute(param);
}
}
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
index 2449440d..038eec44 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
@@ -6,6 +6,7 @@ import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.log.XxlJobFileAppender;
import com.xxl.job.core.log.XxlJobLogger;
import com.xxl.job.core.util.ScriptUtil;
+import com.xxl.job.core.util.ShardingUtil;
/**
* Created by xuxueli on 17/4/27.
@@ -29,7 +30,7 @@ public class ScriptJobHandler extends IJobHandler {
}
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
if (!glueType.isScript()) {
return new ReturnT(IJobHandler.FAIL.getCode(), "glueType["+ glueType +"] invalid.");
@@ -50,9 +51,16 @@ public class ScriptJobHandler extends IJobHandler {
// log file
String logFileName = XxlJobFileAppender.contextHolder.get();
+ // script params:0=param、1=分片序号、2=分片总数
+ ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
+ String[] scriptParams = new String[3];
+ scriptParams[0] = param;
+ scriptParams[1] = String.valueOf(shardingVO.getIndex());
+ scriptParams[2] = String.valueOf(shardingVO.getTotal());
+
// invoke
XxlJobLogger.log("----------- script file:"+ scriptFileName +" -----------");
- int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params);
+ int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, scriptParams);
ReturnT result = (exitValue==0)?IJobHandler.SUCCESS:new ReturnT(IJobHandler.FAIL.getCode(), "script exit value("+exitValue+") is failed");
return result;
}
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java
index 22503eac..e6d03967 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java
@@ -114,19 +114,14 @@ public class JobThread extends Thread{
idleTimes = 0;
triggerLogIdSet.remove(triggerParam.getLogId());
- // parse param
- String[] handlerParams = (triggerParam.getExecutorParams()!=null && triggerParam.getExecutorParams().trim().length()>0)
- ? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(",")).toArray()) : null;
-
-
// log filename, like "logPath/yyyy-MM-dd/9999.log"
String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
XxlJobFileAppender.contextHolder.set(logFileName);
ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
// execute
- XxlJobLogger.log("
----------- xxl-job job execute start -----------
----------- Params:" + Arrays.toString(handlerParams));
- executeResult = handler.execute(handlerParams);
+ XxlJobLogger.log("
----------- xxl-job job execute start -----------
----------- Param:" + triggerParam.getExecutorParams());
+ executeResult = handler.execute(triggerParam.getExecutorParams());
if (executeResult == null) {
executeResult = IJobHandler.FAIL;
}
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/DemoJobHandler.java b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/DemoJobHandler.java
index e3f88109..ceec9b44 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/DemoJobHandler.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/DemoJobHandler.java
@@ -20,7 +20,7 @@ import java.util.concurrent.TimeUnit;
public class DemoJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/ShardingJobHandler.java b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/ShardingJobHandler.java
index f2e8a755..85bd70cd 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/ShardingJobHandler.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/ShardingJobHandler.java
@@ -14,7 +14,7 @@ import com.xxl.job.core.util.ShardingUtil;
public class ShardingJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
// 分片参数
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
index 7d414922..c5fa304d 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
public class DemoJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java
index e7fd1eb6..70578097 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java
@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
public class ShardingJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
// 分片参数
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
index 353fc5ff..79b95c7d 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
public class DemoJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java
index 4224f0a2..b58871fe 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java
@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
public class ShardingJobHandler extends IJobHandler {
@Override
- public ReturnT execute(String... params) throws Exception {
+ public ReturnT execute(String param) throws Exception {
// 分片参数
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();