Ver Fonte

UI以及库中,新增字段 "失败重试次数"

xuxueli há 6 anos atrás
pai
commit
3d15669b3b

+ 2 - 1
doc/db/tables_xxl_job.sql

@@ -163,7 +163,8 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
   `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
   `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
   `executor_fail_strategy` varchar(50) DEFAULT NULL COMMENT '失败处理策略',
-  `executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',
+  `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
+  `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
   `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
   `glue_source` text COMMENT 'GLUE源代码',
   `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',

+ 0 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java

@@ -1,6 +1,5 @@
 package com.xxl.job.admin.controller;
 
-import com.xxl.job.admin.core.enums.ExecutorFailStrategyEnum;
 import com.xxl.job.admin.core.model.XxlJobGroup;
 import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
@@ -39,7 +38,6 @@ public class JobInfoController {
 		model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values());	// 路由策略-列表
 		model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());								// Glue类型-字典
 		model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values());	// 阻塞处理策略-字典
-		model.addAttribute("ExecutorFailStrategyEnum", ExecutorFailStrategyEnum.values());		// 失败处理策略-字典
 
 		// 任务组
 		List<XxlJobGroup> jobGroupList =  xxlJobGroupDao.findAll();

+ 5 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/core/enums/ExecutorFailStrategyEnum.java

@@ -1,17 +1,17 @@
 package com.xxl.job.admin.core.enums;
 
-import com.xxl.job.admin.core.util.I18nUtil;
-
 /**
  * Created by xuxueli on 17/5/9.
  */
+
+@Deprecated
 public enum ExecutorFailStrategyEnum {
 
-    NULL(I18nUtil.getString("jobconf_fail_null")),
+    NULL("NULL"),
 
-    FAIL_TRIGGER_RETRY(I18nUtil.getString("jobconf_fail_trigger_retry")),
+    FAIL_TRIGGER_RETRY("FAIL_TRIGGER_RETRY"),
 
-    FAIL_HANDLE_RETRY(I18nUtil.getString("jobconf_fail_handle_retry"));
+    FAIL_HANDLE_RETRY("FAIL_HANDLE_RETRY");
 
     private final String title;
     private ExecutorFailStrategyEnum(String title) {

+ 9 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java

@@ -27,6 +27,7 @@ public class XxlJobInfo {
 	private String executorBlockStrategy;	// 阻塞处理策略
 	private String executorFailStrategy;	// 失败处理策略
 	private int executorTimeout;     		// 任务执行超时时间,单位秒
+	private int executorFailRetryCount;		// 失败重试次数
 	
 	private String glueType;		// GLUE类型	#com.xxl.job.core.glue.GlueTypeEnum
 	private String glueSource;		// GLUE源代码
@@ -151,6 +152,14 @@ public class XxlJobInfo {
 		this.executorTimeout = executorTimeout;
 	}
 
+	public int getExecutorFailRetryCount() {
+		return executorFailRetryCount;
+	}
+
+	public void setExecutorFailRetryCount(int executorFailRetryCount) {
+		this.executorFailRetryCount = executorFailRetryCount;
+	}
+
 	public String getGlueType() {
 		return glueType;
 	}

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java

@@ -74,7 +74,7 @@ public class XxlJobTrigger {
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":").append(group.getRegistryList());
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":").append(executorRouteStrategyEnum.getTitle()).append("("+i+"/"+addressList.size()+")"); // update01
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":").append(blockStrategy.getTitle());
-                triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailStrategy")).append(":").append(failStrategy.getTitle());
+                triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(jobInfo.getExecutorFailRetryCount());
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append(":").append(jobInfo.getExecutorTimeout());
 
                 // 3、trigger-valid
@@ -144,7 +144,7 @@ public class XxlJobTrigger {
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":").append(group.getRegistryList());
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":").append(executorRouteStrategyEnum.getTitle());
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":").append(blockStrategy.getTitle());
-            triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailStrategy")).append(":").append(failStrategy.getTitle());
+            triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(jobInfo.getExecutorFailRetryCount());
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append(":").append(jobInfo.getExecutorTimeout());
 
             // 3、trigger-valid

+ 1 - 7
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java

@@ -1,6 +1,5 @@
 package com.xxl.job.admin.service.impl;
 
-import com.xxl.job.admin.core.enums.ExecutorFailStrategyEnum;
 import com.xxl.job.admin.core.model.XxlJobGroup;
 import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
@@ -90,9 +89,6 @@ public class XxlJobServiceImpl implements XxlJobService {
 		if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
 			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
 		}
-		if (ExecutorFailStrategyEnum.match(jobInfo.getExecutorFailStrategy(), null) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorFailStrategy")+I18nUtil.getString("system_unvalid")) );
-		}
 		if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {
 			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) );
 		}
@@ -167,9 +163,6 @@ public class XxlJobServiceImpl implements XxlJobService {
 		if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
 			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
 		}
-		if (ExecutorFailStrategyEnum.match(jobInfo.getExecutorFailStrategy(), null) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorFailStrategy")+I18nUtil.getString("system_unvalid")));
-		}
 
 		// ChildJobId valid
 		if (StringUtils.isNotBlank(jobInfo.getChildJobId())) {
@@ -210,6 +203,7 @@ public class XxlJobServiceImpl implements XxlJobService {
 		exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
 		exists_jobInfo.setExecutorFailStrategy(jobInfo.getExecutorFailStrategy());
 		exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout());
+		exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount());
 		exists_jobInfo.setChildJobId(jobInfo.getChildJobId());
         xxlJobInfoDao.update(exists_jobInfo);
 

+ 2 - 2
xxl-job-admin/src/main/resources/i18n/message.properties

@@ -116,7 +116,8 @@ jobinfo_field_childJobId=子任务ID
 jobinfo_field_childJobId_limit=子任务ID({0})不可与父任务重复
 jobinfo_field_childJobId_placeholder=请输入子任务的任务ID,如存在多个则逗号分隔
 jobinfo_field_executorBlockStrategy=阻塞处理策略
-jobinfo_field_executorFailStrategy=失败处理策略
+jobinfo_field_executorFailRetryCount=失败重试次数
+jobinfo_field_executorFailRetryCount_placeholder=失败重试次数,大于零时生效
 jobinfo_script_location=脚本位置
 jobinfo_shard_index=分片序号
 jobinfo_shard_total=分片总数
@@ -198,7 +199,6 @@ jobgroup_del_limit_1=拒绝删除, 系统至少保留一个执行器
 jobconf_block_SERIAL_EXECUTION=单机串行
 jobconf_block_DISCARD_LATER=丢弃后续调度
 jobconf_block_COVER_EARLY=覆盖之前调度
-jobconf_fail_null=无
 jobconf_fail_trigger_retry=调度失败重试
 jobconf_fail_handle_retry=执行失败重试
 jobconf_route_first=第一个

+ 2 - 2
xxl-job-admin/src/main/resources/i18n/message_en.properties

@@ -116,7 +116,8 @@ jobinfo_field_childJobId=Child Job ID
 jobinfo_field_childJobId_limit=Child job ID({0}) cannot be duplicated with the parent job.
 jobinfo_field_childJobId_placeholder=Please enter the Child job ID, if there are more than one comma separated
 jobinfo_field_executorBlockStrategy=Block Strategy
-jobinfo_field_executorFailStrategy=Fail Strategy
+jobinfo_field_executorFailRetryCount=Fail Retry Count
+jobinfo_field_executorFailRetryCount_placeholder=Fail Retry Count. effect if greater than zero
 jobinfo_script_location=Script location
 jobinfo_shard_index=Shard index
 jobinfo_shard_total=Shard total
@@ -198,7 +199,6 @@ jobgroup_del_limit_1=Refuses to delete, the system retains at least one executor
 jobconf_block_SERIAL_EXECUTION=Serial execution
 jobconf_block_DISCARD_LATER=Discard Later
 jobconf_block_COVER_EARLY=Cover Early
-jobconf_fail_null=Fail Alarm
 jobconf_fail_trigger_retry=Trigger Fail Retry
 jobconf_fail_handle_retry=Handle Fail Retry
 jobconf_route_first=First

+ 5 - 0
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml

@@ -22,6 +22,7 @@
 		<result column="executor_block_strategy" property="executorBlockStrategy" />
 		<result column="executor_fail_strategy" property="executorFailStrategy" />
 		<result column="executor_timeout" property="executorTimeout" />
+		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
 
 	    <result column="glue_type" property="glueType" />
 	    <result column="glue_source" property="glueSource" />
@@ -46,6 +47,7 @@
 		t.executor_block_strategy,
 		t.executor_fail_strategy,
 		t.executor_timeout,
+		t.executor_fail_retry_count,
 		t.glue_type,
 		t.glue_source,
 		t.glue_remark,
@@ -102,6 +104,7 @@
 			executor_block_strategy,
 			executor_fail_strategy,
 			executor_timeout,
+			executor_fail_retry_count,
 			glue_type,
 			glue_source,
 			glue_remark,
@@ -121,6 +124,7 @@
 			#{executorBlockStrategy},
 			#{executorFailStrategy},
 			#{executorTimeout},
+			#{executorFailRetryCount},
 			#{glueType},
 			#{glueSource},
 			#{glueRemark},
@@ -153,6 +157,7 @@
 			executor_block_strategy = #{executorBlockStrategy},
 			executor_fail_strategy = #{executorFailStrategy},
 			executor_timeout = ${executorTimeout},
+			executor_fail_retry_count = ${executorFailRetryCount},
 			glue_type = #{glueType},
 			glue_source = #{glueSource},
 			glue_remark = #{glueRemark},

+ 4 - 16
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl

@@ -157,14 +157,8 @@
                         </div>
                     </div>
                     <div class="form-group">
-                        <label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorFailStrategy}<font color="red">*</font></label>
-                        <div class="col-sm-4">
-                            <select class="form-control" name="executorFailStrategy" >
-								<#list ExecutorFailStrategyEnum as item>
-									<option value="${item}" >${item.title}</option>
-								</#list>
-                            </select>
-						</div>
+                        <label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorFailRetryCount}<font color="black">*</font></label>
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorFailRetryCount" placeholder="${I18n.jobinfo_field_executorFailRetryCount_placeholder}" maxlength="4" ></div>
                         <label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_alarmemail}<font color="black">*</font></label>
                         <div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="${I18n.jobinfo_field_alarmemail_placeholder}" maxlength="100" ></div>
                     </div>
@@ -345,14 +339,8 @@ process.exit(0)
                         </div>
                     </div>
                     <div class="form-group">
-                        <label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorFailStrategy}<font color="red">*</font></label>
-                        <div class="col-sm-4">
-                            <select class="form-control" name="executorFailStrategy" >
-							<#list ExecutorFailStrategyEnum as item>
-                                <option value="${item}" >${item.title}</option>
-							</#list>
-                            </select>
-                        </div>
+                        <label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorFailRetryCount}<font color="black">*</font></label>
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorFailRetryCount" placeholder="${I18n.jobinfo_field_executorFailRetryCount_placeholder}" maxlength="4" ></div>
                         <label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_alarmemail}<font color="black">*</font></label>
                         <div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="${I18n.jobinfo_field_alarmemail_placeholder}" maxlength="100" ></div>
 

+ 16 - 1
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js

@@ -267,6 +267,9 @@ $(function() {
 			},
             executorTimeout : {
                 digits:true
+            },
+            executorFailRetryCount : {
+                digits:true
             }
         }, 
         messages : {  
@@ -278,6 +281,12 @@ $(function() {
             },
             author : {
             	required : I18n.system_please_input + I18n.jobinfo_field_author
+            },
+            executorTimeout : {
+                digits: I18n.system_please_input + I18n.system_digits
+            },
+            executorFailRetryCount : {
+                digits: I18n.system_please_input + I18n.system_digits
             }
         },
 		highlight : function(element) {  
@@ -376,12 +385,12 @@ $(function() {
 		$("#updateModal .form input[name='author']").val( row.author );
 		$("#updateModal .form input[name='alarmEmail']").val( row.alarmEmail );
 		$("#updateModal .form input[name='executorTimeout']").val( row.executorTimeout );
+        $("#updateModal .form input[name='executorFailRetryCount']").val( row.executorFailRetryCount );
 		$('#updateModal .form select[name=executorRouteStrategy] option[value='+ row.executorRouteStrategy +']').prop('selected', true);
 		$("#updateModal .form input[name='executorHandler']").val( row.executorHandler );
 		$("#updateModal .form input[name='executorParam']").val( row.executorParam );
         $("#updateModal .form input[name='childJobId']").val( row.childJobId );
 		$('#updateModal .form select[name=executorBlockStrategy] option[value='+ row.executorBlockStrategy +']').prop('selected', true);
-		$('#updateModal .form select[name=executorFailStrategy] option[value='+ row.executorFailStrategy +']').prop('selected', true);
 		$('#updateModal .form select[name=glueType] option[value='+ row.glueType +']').prop('selected', true);
 
         $("#updateModal .form select[name=glueType]").change();
@@ -407,6 +416,9 @@ $(function() {
 			},
             executorTimeout : {
                 digits:true
+            },
+            executorFailRetryCount : {
+                digits:true
             }
 		},
 		messages : {
@@ -421,6 +433,9 @@ $(function() {
 			},
             executorTimeout : {
                 digits: I18n.system_please_input + I18n.system_digits
+            },
+            executorFailRetryCount : {
+                digits: I18n.system_please_input + I18n.system_digits
             }
 		},
 		highlight : function(element) {