diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index ed328959eedbd8ded7356f49065b0b51e849f06c..606eb9926b034a079de14b5aa4e7511746397242 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -158,6 +158,7 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` ( `update_time` datetime DEFAULT NULL, `author` varchar(64) DEFAULT NULL COMMENT '作者', `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', + `execute_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间', `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', 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 51847ac1f1668a369165233da9f1882145027bf3..01c5227fb809b30571095f72eef37dc22f34509a 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 @@ -36,6 +36,17 @@ public class XxlJobInfo { // copy from quartz private String jobStatus; // 任务状态 【base on quartz】 + private int executeTimeout; // 任务最多执行时间,超时后报警 + + public int getExecuteTimeout() { + return executeTimeout; + } + + public void setExecuteTimeout(int executeTimeout) { + this.executeTimeout = executeTimeout; + } + + public int getId() { return id; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java index 66a7734620fee632abf29b3f3bda963d495c1746..1faa3984a77681ed69e8b9e5f9c31ff55276a101 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java @@ -63,6 +63,7 @@ public class JobFailMonitorHelper { logger.info(">>>>>>>>>>> job monitor, job success, JobLogId:{}", jobLogId); } else if (IJobHandler.FAIL.getCode() == log.getTriggerCode() || IJobHandler.FAIL.getCode() == log.getHandleCode() + || IJobHandler.TIMEOUT.getCode() == log.getHandleCode() || IJobHandler.FAIL_RETRY.getCode() == log.getHandleCode() ) { // job fail, failAlarm(log); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java index a03d393cbdb264510cfa33a132adab9f4a4976ee..76811ec26b0ec3d87bf18711ae8e2f137cb2bd26 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java @@ -96,6 +96,8 @@ public class XxlJobTrigger { triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime()); triggerParam.setBroadcastIndex(i); triggerParam.setBroadcastTotal(addressList.size()); // update02 + // 执行超时时间 + triggerParam.setExecuteTimeout(jobInfo.getExecuteTimeout()); // 4.2、trigger-run (route run / trigger remote executor) triggerResult = runExecutor(triggerParam, address); // update03 @@ -164,6 +166,7 @@ public class XxlJobTrigger { triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime()); triggerParam.setBroadcastIndex(0); triggerParam.setBroadcastTotal(1); + triggerParam.setExecuteTimeout(jobInfo.getExecuteTimeout()); // 4.2、trigger-run (route run / trigger remote executor) triggerResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList); diff --git a/xxl-job-admin/src/main/resources/i18n/message.properties b/xxl-job-admin/src/main/resources/i18n/message.properties index 66c7aa9dfb086d90cef5e98c28946c8e192ec32b..3972eafabc0621653c818946be47f8093ef77e71 100644 --- a/xxl-job-admin/src/main/resources/i18n/message.properties +++ b/xxl-job-admin/src/main/resources/i18n/message.properties @@ -107,6 +107,7 @@ jobinfo_field_gluetype=运行模式 jobinfo_field_executorparam=任务参数 jobinfo_field_cron_unvalid=Cron格式非法 jobinfo_field_author=负责人 +jobinfo_field_timeout=最大执行时间 jobinfo_field_alarmemail=报警邮件 jobinfo_field_alarmemail_placeholder=请输入报警邮件,多个邮件地址则逗号分隔 jobinfo_field_executorRouteStrategy=路由策略 @@ -157,6 +158,7 @@ joblog_clean_type_9=清理所有日志数据 joblog_clean_type_unvalid=清理类型参数异常 joblog_handleCode_200=成功 joblog_handleCode_500=失败 +joblog_handleCode_400=超时 joblog_handleCode_501=失败重试 joblog_kill_log=终止任务 joblog_kill_log_limit=调度失败,无法终止日志 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 9a8d14bd24045ce59bb6a2291dafc056aeead7c6..e66b36d78ded9f24fac731018f3c77e8027041a1 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_en.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties @@ -103,6 +103,7 @@ jobinfo_field_update=Edit Job jobinfo_field_id=Job ID jobinfo_field_jobgroup=Executor jobinfo_field_jobdesc=Job description +jobinfo_field_timeout=Max execute time jobinfo_field_gluetype=GLUE Type jobinfo_field_executorparam=Param jobinfo_field_cron_unvalid=The Cron is illegal @@ -157,6 +158,7 @@ joblog_clean_type_9=Clean up all log data joblog_clean_type_unvalid=Clean type is illegal joblog_handleCode_200=Success joblog_handleCode_500=Fail +joblog_handleCode_400=Timeout joblog_handleCode_501=Fail retry joblog_kill_log=Kill Job joblog_kill_log_limit=Trigger Fail, can not kill job 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 b1fc6302adaa51af7f952ba8b50c722628925edd..517e0697e4474eadec1101ae9c08ab1ca2640364 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml @@ -1,18 +1,18 @@ - - + - + - + - + @@ -21,11 +21,12 @@ - + + @@ -48,9 +49,10 @@ t.glue_source, t.glue_remark, t.glue_updatetime, + t.execute_timeout, t.child_jobid - + - +