Pārlūkot izejas kodu

任务参数“IJobHandler.execute”入参改为“String params”,增强入参通用性。

xuxueli 7 gadus atpakaļ
vecāks
revīzija
a0c9cd3e82

+ 19 - 8
doc/XXL-JOB官方文档.md Parādīt failu

@@ -791,11 +791,21 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
791 791
 
792 792
 "分片广播" 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
793 793
 
794
-"分片广播" 和普通任务开发流程一致,不同之处在于可以可以获取分片参数,获取分片参数对象的代码如下(可参考Sample示例执行器中的示例任务"ShardingJobHandler" ):
794
+"分片广播" 和普通任务开发流程一致,不同之处在于可以可以获取分片参数,获取分片参数进行分片业务处理。
795 795
 
796
-    ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
796
+- Java语言任务获取分片参数方式:BEAN、GLUE模式(Java)
797
+```
798
+// 可参考Sample示例执行器中的示例任务"ShardingJobHandler"了解试用 
799
+ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
800
+```
801
+- 脚本语言任务获取分片参数方式:GLUE模式(Shell)、GLUE模式(Python)、GLUE模式(Nodejs)
802
+```
803
+// 脚本任务入参固定为三个,依次为:任务传参、分片序号、分片总数。以Shell模式任务为例,获取分片参数代码如下
804
+echo "分片序号 index = $2"
805
+echo "分片总数 total = $3"
806
+```  
797 807
     
798
-该分片参数对象拥有两个属性:
808
+分片参数属性说明
799 809
 
800 810
     index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
801 811
     total:总分片数,执行器集群的总机器数量;
@@ -1083,7 +1093,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1083 1093
 - 18、任务列表界面,左侧菜单合并时样式错乱问题修复;
1084 1094
 - 19、执行器地址录入交互优化,地址长度扩展支持至512位,支持大规模执行器集群配置;
1085 1095
 - 20、项目依赖升级,如spring、jackson等;
1086
-
1096
+- 21、任务参数“IJobHandler.execute”入参改为“String params”,增强入参通用性。
1097
+- 22、脚本任务Shell、Python和Nodejs等支持获取分片参数;
1087 1098
 
1088 1099
 ### TODO LIST
1089 1100
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
@@ -1099,10 +1110,10 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1099 1110
 - 11、任务日志,记录发起调度的机器信息;
1100 1111
 - 12、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态;
1101 1112
 - 13、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;
1102
-- 14、脚本任务 Shell、Python和Nodejs,如何友好获取分片参数
1103
-- 15、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性
1104
-- 16、任务告警邮件优化,调整为表格形式
1105
-- 17、执行器回调地址格式兼容,支持非"/"结尾路径配置
1113
+- 14、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性
1114
+- 15、任务告警邮件优化,调整为表格形式
1115
+- 16、执行器回调地址格式兼容,支持非"/"结尾路径配置
1116
+- 17、任务事件触发API服务优化,支持调用时动态传参
1106 1117
 
1107 1118
 
1108 1119
 ## 七、其他

+ 2 - 2
doc/db/tables_xxl_job.sql Parādīt failu

@@ -156,7 +156,7 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
156 156
   `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
157 157
   `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
158 158
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
159
-  `executor_param` varchar(255) DEFAULT NULL COMMENT '执行器任务参数',
159
+  `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
160 160
   `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
161 161
   `executor_fail_strategy` varchar(50) DEFAULT NULL COMMENT '失败处理策略',
162 162
   `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
@@ -174,7 +174,7 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
174 174
   `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
175 175
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
176 176
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
177
-  `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
177
+  `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
178 178
   `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
179 179
   `trigger_code` varchar(255) NOT NULL DEFAULT '0' COMMENT '调度-结果',
180 180
   `trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',

+ 3 - 3
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl Parādīt failu

@@ -143,7 +143,7 @@
143 143
                     </div>
144 144
                     <div class="form-group">
145 145
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
146
-                        <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
146
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="512" ></div>
147 147
                         <label for="lastname" class="col-sm-2 control-label">子任务Key<font color="black">*</font></label>
148 148
                         <div class="col-sm-4"><input type="text" class="form-control" name="childJobKey" placeholder="请输入子任务的任务Key,如存在多个逗号分隔" maxlength="100" ></div>
149 149
                     </div>
@@ -192,7 +192,7 @@ import com.xxl.job.core.handler.IJobHandler;
192 192
 public class DemoGlueJobHandler extends IJobHandler {
193 193
 
194 194
 	@Override
195
-	public ReturnT<String> execute(String... params) throws Exception {
195
+	public ReturnT<String> execute(String param) throws Exception {
196 196
 		XxlJobLogger.log("XXL-JOB, Hello World.");
197 197
 		return ReturnT.SUCCESS;
198 198
 	}
@@ -300,7 +300,7 @@ process.exit(0)
300 300
                     </div>
301 301
                     <div class="form-group">
302 302
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
303
-                        <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
303
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="512" ></div>
304 304
                         <label for="lastname" class="col-sm-2 control-label">子任务Key<font color="black">*</font></label>
305 305
                         <div class="col-sm-4"><input type="text" class="form-control" name="childJobKey" placeholder="请输入子任务的任务Key,如存在多个逗号分隔" maxlength="100" ></div>
306 306
                     </div>

+ 2 - 2
xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java Parādīt failu

@@ -21,11 +21,11 @@ public abstract class IJobHandler {
21 21
 	/**
22 22
 	 * execute handler
23 23
 	 *
24
-	 * @param params
24
+	 * @param param
25 25
 	 * @return
26 26
 	 * @throws Exception
27 27
 	 */
28
-	public abstract ReturnT<String> execute(String... params) throws Exception;
28
+	public abstract ReturnT<String> execute(String param) throws Exception;
29 29
 
30 30
 
31 31
 	/**

+ 2 - 2
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java Parādīt failu

@@ -21,9 +21,9 @@ public class GlueJobHandler extends IJobHandler {
21 21
 	}
22 22
 
23 23
 	@Override
24
-	public ReturnT<String> execute(String... params) throws Exception {
24
+	public ReturnT<String> execute(String param) throws Exception {
25 25
 		XxlJobLogger.log("----------- glue.version:"+ glueUpdatetime +" -----------");
26
-		return jobHandler.execute(params);
26
+		return jobHandler.execute(param);
27 27
 	}
28 28
 
29 29
 }

+ 10 - 2
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java Parādīt failu

@@ -6,6 +6,7 @@ import com.xxl.job.core.handler.IJobHandler;
6 6
 import com.xxl.job.core.log.XxlJobFileAppender;
7 7
 import com.xxl.job.core.log.XxlJobLogger;
8 8
 import com.xxl.job.core.util.ScriptUtil;
9
+import com.xxl.job.core.util.ShardingUtil;
9 10
 
10 11
 /**
11 12
  * Created by xuxueli on 17/4/27.
@@ -29,7 +30,7 @@ public class ScriptJobHandler extends IJobHandler {
29 30
     }
30 31
 
31 32
     @Override
32
-    public ReturnT<String> execute(String... params) throws Exception {
33
+    public ReturnT<String> execute(String param) throws Exception {
33 34
 
34 35
         if (!glueType.isScript()) {
35 36
             return new ReturnT<String>(IJobHandler.FAIL.getCode(), "glueType["+ glueType +"] invalid.");
@@ -50,9 +51,16 @@ public class ScriptJobHandler extends IJobHandler {
50 51
         // log file
51 52
         String logFileName = XxlJobFileAppender.contextHolder.get();
52 53
 
54
+        // script params:0=param、1=分片序号、2=分片总数
55
+        ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
56
+        String[] scriptParams = new String[3];
57
+        scriptParams[0] = param;
58
+        scriptParams[1] = String.valueOf(shardingVO.getIndex());
59
+        scriptParams[2] = String.valueOf(shardingVO.getTotal());
60
+
53 61
         // invoke
54 62
         XxlJobLogger.log("----------- script file:"+ scriptFileName +" -----------");
55
-        int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, params);
63
+        int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, scriptParams);
56 64
         ReturnT<String> result = (exitValue==0)?IJobHandler.SUCCESS:new ReturnT<String>(IJobHandler.FAIL.getCode(), "script exit value("+exitValue+") is failed");
57 65
         return result;
58 66
     }

+ 2 - 7
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java Parādīt failu

@@ -114,19 +114,14 @@ public class JobThread extends Thread{
114 114
 					idleTimes = 0;
115 115
 					triggerLogIdSet.remove(triggerParam.getLogId());
116 116
 
117
-					// parse param
118
-					String[] handlerParams = (triggerParam.getExecutorParams()!=null && triggerParam.getExecutorParams().trim().length()>0)
119
-							? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(",")).toArray()) : null;
120
-
121
-
122 117
 					// log filename, like "logPath/yyyy-MM-dd/9999.log"
123 118
 					String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
124 119
 					XxlJobFileAppender.contextHolder.set(logFileName);
125 120
 					ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
126 121
 
127 122
 					// execute
128
-					XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + Arrays.toString(handlerParams));
129
-					executeResult = handler.execute(handlerParams);
123
+					XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Param:" + triggerParam.getExecutorParams());
124
+					executeResult = handler.execute(triggerParam.getExecutorParams());
130 125
 					if (executeResult == null) {
131 126
 						executeResult = IJobHandler.FAIL;
132 127
 					}

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/DemoJobHandler.java Parādīt failu

@@ -20,7 +20,7 @@ import java.util.concurrent.TimeUnit;
20 20
 public class DemoJobHandler extends IJobHandler {
21 21
 
22 22
 	@Override
23
-	public ReturnT<String> execute(String... params) throws Exception {
23
+	public ReturnT<String> execute(String param) throws Exception {
24 24
 		XxlJobLogger.log("XXL-JOB, Hello World.");
25 25
 
26 26
 		for (int i = 0; i < 5; i++) {

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/ShardingJobHandler.java Parādīt failu

@@ -14,7 +14,7 @@ import com.xxl.job.core.util.ShardingUtil;
14 14
 public class ShardingJobHandler extends IJobHandler {
15 15
 
16 16
 	@Override
17
-	public ReturnT<String> execute(String... params) throws Exception {
17
+	public ReturnT<String> execute(String param) throws Exception {
18 18
 
19 19
 		// 分片参数
20 20
 		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java Parādīt failu

@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
25 25
 public class DemoJobHandler extends IJobHandler {
26 26
 
27 27
 	@Override
28
-	public ReturnT<String> execute(String... params) throws Exception {
28
+	public ReturnT<String> execute(String param) throws Exception {
29 29
 		XxlJobLogger.log("XXL-JOB, Hello World.");
30 30
 		
31 31
 		for (int i = 0; i < 5; i++) {

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java Parādīt failu

@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
18 18
 public class ShardingJobHandler extends IJobHandler {
19 19
 
20 20
 	@Override
21
-	public ReturnT<String> execute(String... params) throws Exception {
21
+	public ReturnT<String> execute(String param) throws Exception {
22 22
 
23 23
 		// 分片参数
24 24
 		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java Parādīt failu

@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
25 25
 public class DemoJobHandler extends IJobHandler {
26 26
 
27 27
 	@Override
28
-	public ReturnT<String> execute(String... params) throws Exception {
28
+	public ReturnT<String> execute(String param) throws Exception {
29 29
 		XxlJobLogger.log("XXL-JOB, Hello World.");
30 30
 
31 31
 		for (int i = 0; i < 5; i++) {

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/ShardingJobHandler.java Parādīt failu

@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
18 18
 public class ShardingJobHandler extends IJobHandler {
19 19
 
20 20
 	@Override
21
-	public ReturnT<String> execute(String... params) throws Exception {
21
+	public ReturnT<String> execute(String param) throws Exception {
22 22
 
23 23
 		// 分片参数
24 24
 		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();