From 67fc5a189567f52298ab5a3e4da1dcf7deee1b69 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sun, 23 Sep 2018 20:27:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=A7=A6=E5=8F=91=E6=97=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81=E4=BC=A0=E5=8F=82=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E4=B8=AD=E5=BF=83=E4=B8=8EAPI=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=9D=87=E6=8F=90=E4=BE=9B=E6=8F=90=E4=BE=9B=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8F=82=E6=95=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...30\346\226\271\346\226\207\346\241\243.md" | 7 ++- .../admin/controller/JobInfoController.java | 9 +++- .../admin/core/jobbean/RemoteHttpJobBean.java | 2 +- .../core/thread/JobFailMonitorHelper.java | 2 +- .../core/thread/JobTriggerPoolHelper.java | 14 ++++-- .../job/admin/core/trigger/XxlJobTrigger.java | 11 ++++- .../job/admin/service/impl/AdminBizImpl.java | 2 +- .../template/jobinfo/jobinfo.index.ftl | 29 +++++++++++ .../main/webapp/static/js/jobinfo.index.1.js | 49 +++++++++++++++++-- 9 files changed, 105 insertions(+), 20 deletions(-) diff --git "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" index b22f678a..48d430a1 100644 --- "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" +++ "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" @@ -1283,7 +1283,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 33、修复表字段 “t.order”与数据库关键字冲突查询失败的问题, - 34、调度中心提供API服务,支持通过API服务对任务进行查询、新增、更新、启停等操作; - 35、分片任务失败重试优化,仅重试当前失败的分片; -- 36、任务参数数据框调整,手动触发时支持动态输入参数; +- 36、任务触发时支持动态传参,调度中心与API服务均提供提供动态参数功能; ### TODO LIST @@ -1298,7 +1298,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 9、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件; - 10、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性; - 11、API事件触发类型任务(更类似MQ消息)支持"动态传参、延时消费";该类型任务不走Quartz,单独建立MQ消息表,调度中心竞争触发;待定,该功能与 XXL-MQ 冲突,该场景建议用后者; -- 12、API任务触发时支持动态传参; +- 12、调度线程池改为协程方式实现,大幅降低系统内存消耗; - 13、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题; - 14、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态; - 15、新增任务默认运行状态,任务更新时运行状态保持不变; @@ -1306,8 +1306,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 17、注册中心支持扩展,除默认基于DB之外,支持扩展接入第三方注册中心如zk、eureka等; - 18、流程任务,支持参数传递; - 19、SimpleTrigger 支持; -- 20、调度线程池改为协程方式实现,大幅降低系统内存消耗; -- 21、Release发布时,一同发布调度中心安装包,真正实现开箱即用; +- 20、Release发布时,一同发布调度中心安装包,真正实现开箱即用; ## 七、其他 diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java index 48bbd585..1d8e9d7c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java @@ -91,8 +91,13 @@ public class JobInfoController { @RequestMapping("/trigger") @ResponseBody //@PermessionLimit(limit = false) - public ReturnT triggerJob(int id) { - JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null); + public ReturnT triggerJob(int id, String executorParam) { + // force cover job param + if (executorParam == null) { + executorParam = ""; + } + + JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam); return ReturnT.SUCCESS; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java index 84c59e42..6dab8c24 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java @@ -29,7 +29,7 @@ public class RemoteHttpJobBean extends QuartzJobBean { // trigger //XxlJobTrigger.trigger(jobId); - JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null); + JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null); } } \ No newline at end of file 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 849fd533..c1b30cfc 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 @@ -73,7 +73,7 @@ public class JobFailMonitorHelper { XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId()); if (log.getExecutorFailRetryCount() > 0) { - JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam()); + JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), null); String retryMsg = "

>>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<<
"; log.setTriggerMsg(log.getTriggerMsg() + retryMsg); XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(log); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java index 298ecaaa..9affd2eb 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java @@ -29,11 +29,11 @@ public class JobTriggerPoolHelper { new ThreadPoolExecutor.CallerRunsPolicy()); - public void addTrigger(final int jobId, final TriggerTypeEnum triggerType, final int failRetryCount, final String executorShardingParam) { + public void addTrigger(final int jobId, final TriggerTypeEnum triggerType, final int failRetryCount, final String executorShardingParam, final String executorParam) { triggerPool.execute(new Runnable() { @Override public void run() { - XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam); + XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam); } }); } @@ -50,13 +50,17 @@ public class JobTriggerPoolHelper { /** * @param jobId + * @param triggerType * @param failRetryCount * >=0: use this param * <0: use param from job info config - * + * @param executorShardingParam + * @param executorParam + * null: use job param + * not null: cover job param */ - public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam) { - helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam); + public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) { + helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam); } public static void toStop() { 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 f3bb2462..e570f5c7 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 @@ -30,18 +30,25 @@ public class XxlJobTrigger { * trigger job * * @param jobId + * @param triggerType * @param failRetryCount * >=0: use this param * <0: use param from job info config - * + * @param executorShardingParam + * @param executorParam + * null: use job param + * not null: cover job param */ - public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam) { + public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) { // load data XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId); if (jobInfo == null) { logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}", jobId); return; } + if (executorParam != null) { + jobInfo.setExecutorParam(executorParam); + } int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount(); XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(jobInfo.getJobGroup()); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java index 73544de0..00550593 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java @@ -71,7 +71,7 @@ public class AdminBizImpl implements AdminBiz { int childJobId = (StringUtils.isNotBlank(childJobIds[i]) && StringUtils.isNumeric(childJobIds[i]))?Integer.valueOf(childJobIds[i]):-1; if (childJobId > 0) { - JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, 0, null); + JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, 0, null, null); ReturnT triggerChildResult = ReturnT.SUCCESS; // add msg 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 2bbd5edb..8d046423 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 @@ -380,6 +380,35 @@ exit 0 +<#-- trigger --> + + <@netCommon.commonScript /> diff --git a/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js b/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js index 580247da..76c6ccde 100644 --- a/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js +++ b/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js @@ -122,7 +122,7 @@ $(function() { // html tableData['key'+row.id] = row; var html = '

'+ - ' '+ + ' '+ pause_resume + '
'+ ' '+ @@ -195,9 +195,6 @@ $(function() { typeName = I18n.system_opt_del ; url = base_url + "/jobinfo/remove"; needFresh = true; - } else if ("job_trigger" == type) { - typeName = I18n.jobinfo_opt_run ; - url = base_url + "/jobinfo/trigger"; } else { return; } @@ -246,6 +243,50 @@ $(function() { }); }); + // job trigger + $("#job_list").on('click', '.job_trigger',function() { + var id = $(this).parent('p').attr("id"); + var row = tableData['key'+id]; + + $("#jobTriggerModal .form input[name='id']").val( row.id ); + $("#jobTriggerModal .form textarea[name='executorParam']").val( row.executorParam ); + + $('#jobTriggerModal').modal({backdrop: false, keyboard: false}).modal('show'); + }); + $("#jobTriggerModal .ok").on('click',function() { + $.ajax({ + type : 'POST', + url : base_url + "/jobinfo/trigger", + data : { + "id" : $("#jobTriggerModal .form input[name='id']").val(), + "executorParam" : $("#jobTriggerModal .textarea[name='executorParam']").val() + }, + dataType : "json", + success : function(data){ + if (data.code == 200) { + $('#jobTriggerModal').modal('hide'); + + layer.open({ + title: I18n.system_tips, + btn: [ I18n.system_ok ], + content: I18n.jobinfo_opt_run + I18n.system_success , + icon: '1' + }); + } else { + layer.open({ + title: I18n.system_tips, + btn: [ I18n.system_ok ], + content: (data.msg || I18n.jobinfo_opt_run + I18n.system_fail ), + icon: '2' + }); + } + } + }); + }); + $("#jobTriggerModal").on('hide.bs.modal', function () { + $("#jobTriggerModal .form")[0].reset(); + }); + // add $(".add").click(function(){ $('#addModal').modal({backdrop: false, keyboard: false}).modal('show'); -- GitLab