From d66bdc88113ed9e25b09b6a3b547338e794b0f0a Mon Sep 17 00:00:00 2001 From: "xueli.xue" Date: Sun, 12 Mar 2017 18:04:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=95=E5=B1=82=E5=85=B3=E9=94=AE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=B0=83=E6=95=B4=EF=BC=9AJobKey=E7=9A=84group?= =?UTF-8?q?=E5=92=8Cname=E5=B1=9E=E6=80=A7=EF=BC=8C=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E9=87=87=E7=94=A8=E6=89=A7=E8=A1=8C=E5=99=A8=E4=B8=BB=E9=94=AE?= =?UTF-8?q?ID=E5=92=8C=E4=BB=BB=E5=8A=A1=E4=B8=BB=E9=94=AEID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + db/tables_xxl_job.sql | 12 +-- .../admin/controller/JobCodeController.java | 2 +- .../admin/controller/JobInfoController.java | 16 +-- .../admin/controller/JobLogController.java | 32 +++--- .../xxl/job/admin/core/biz/AdminBizImpl.java | 6 +- .../admin/core/jobbean/RemoteHttpJobBean.java | 12 +-- .../xxl/job/admin/core/model/XxlJobInfo.java | 13 +-- .../xxl/job/admin/core/model/XxlJobLog.java | 10 +- .../job/admin/core/model/XxlJobLogGlue.java | 2 +- .../core/schedule/XxlJobDynamicScheduler.java | 6 +- .../admin/core/thread/JobMonitorHelper.java | 2 +- .../com/xxl/job/admin/dao/IXxlJobInfoDao.java | 6 +- .../com/xxl/job/admin/dao/IXxlJobLogDao.java | 6 +- .../job/admin/dao/impl/XxlJobInfoDaoImpl.java | 20 +--- .../job/admin/dao/impl/XxlJobLogDaoImpl.java | 15 ++- .../xxl/job/admin/service/IXxlJobService.java | 8 +- .../admin/service/impl/XxlJobServiceImpl.java | 98 ++++++++----------- .../mybatis-mapper/XxlJobInfoMapper.xml | 32 ++---- .../mybatis-mapper/XxlJobLogMapper.xml | 27 +++-- .../template/jobinfo/jobinfo.index.ftl | 3 +- .../WEB-INF/template/joblog/joblog.index.ftl | 16 +-- .../main/webapp/static/js/jobinfo.index.1.js | 16 ++- .../main/webapp/static/js/joblog.index.1.js | 34 ++----- .../com/xxl/job/dao/impl/XxlJobInfoTest.java | 8 +- .../com/xxl/job/core/biz/ExecutorBiz.java | 5 +- .../job/core/biz/impl/ExecutorBizImpl.java | 27 ++--- .../xxl/job/core/biz/model/TriggerParam.java | 59 +++-------- .../xxl/job/core/executor/XxlJobExecutor.java | 18 ++-- .../com/xxl/job/core/glue/GlueFactory.java | 22 ++--- .../xxl/job/core/glue/loader/GlueLoader.java | 5 +- .../core/glue/loader/impl/DbGlueLoader.java | 6 +- .../job/core/handler/impl/GlueJobHandler.java | 10 +- 33 files changed, 219 insertions(+), 337 deletions(-) diff --git a/README.md b/README.md index 0c67324f..c3e47565 100644 --- a/README.md +++ b/README.md @@ -738,6 +738,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 4、规范系统配置数据,通过配置文件统一管理; - 5、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址; - 6、执行器路由规则:第一个、循环、随机、顺序故障(默认)转移; +- 7、底层扩展数据接口调整; +- 8、新建任务默认为非运行状态; #### TODO LIST - 1、支持脚本JOB(源码或指定路径), 即shell/python/php等, 日志实时输出并支持在线监控;定制JobHandler实现; diff --git a/db/tables_xxl_job.sql b/db/tables_xxl_job.sql index b4d23181..829ab1bb 100644 --- a/db/tables_xxl_job.sql +++ b/db/tables_xxl_job.sql @@ -147,8 +147,7 @@ CREATE TABLE XXL_JOB_QRTZ_LOCKS CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `job_group` int(11) NOT NULL COMMENT '任务组(执行器ID)', - `job_name` varchar(255) NOT NULL COMMENT '任务名', + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON', `job_desc` varchar(255) NOT NULL, `add_time` datetime DEFAULT NULL, @@ -167,8 +166,8 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` ( CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `job_group` int(11) NOT NULL COMMENT '任务组', - `job_name` varchar(255) NOT NULL COMMENT '任务名', + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param', @@ -181,10 +180,9 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOGGLUE ( +CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOGGLUE` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `job_group` int(11) NOT NULL, - `job_name` varchar(255) NOT NULL, + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `glue_source` text, `glue_remark` varchar(128) NOT NULL, `add_time` timestamp NULL DEFAULT NULL, diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java index 50cd952a..5db491ac 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java @@ -63,7 +63,7 @@ public class JobCodeController { xxlJobInfoDao.update(exists_jobInfo); // remove code backup more than 30 - xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 3); + xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 30); return ReturnT.SUCCESS; } 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 434f7ebd..0ab00458 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 @@ -64,26 +64,26 @@ public class JobInfoController { @RequestMapping("/remove") @ResponseBody - public ReturnT remove(int jobGroup, String jobName) { - return xxlJobService.remove(jobGroup, jobName); + public ReturnT remove(int id) { + return xxlJobService.remove(id); } @RequestMapping("/pause") @ResponseBody - public ReturnT pause(int jobGroup, String jobName) { - return xxlJobService.pause(jobGroup, jobName); + public ReturnT pause(int id) { + return xxlJobService.pause(id); } @RequestMapping("/resume") @ResponseBody - public ReturnT resume(int jobGroup, String jobName) { - return xxlJobService.resume(jobGroup, jobName); + public ReturnT resume(int id) { + return xxlJobService.resume(id); } @RequestMapping("/trigger") @ResponseBody - public ReturnT triggerJob(int jobGroup, String jobName) { - return xxlJobService.triggerJob(jobGroup, jobName); + public ReturnT triggerJob(int id) { + return xxlJobService.triggerJob(id); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java index 08fa6726..d07bf952 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java @@ -40,29 +40,33 @@ public class JobLogController { public IXxlJobLogDao xxlJobLogDao; @RequestMapping - public String index(Model model, String jobGroup, String jobName) { + public String index(Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) { - // 任务组 + // 执行器列表 List jobGroupList = xxlJobGroupDao.findAll(); - - model.addAttribute("jobGroup", jobGroup); - model.addAttribute("jobName", jobName); model.addAttribute("JobGroupList", jobGroupList); + + // 任务 + if (jobId > 0) { + XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId); + model.addAttribute("jobInfo", jobInfo); + } + return "joblog/joblog.index"; } @RequestMapping("/getJobsByGroup") @ResponseBody - public ReturnT> listJobByGroup(String jobGroup){ - List list = xxlJobInfoDao.getJobsByGroup(jobGroup); - return new ReturnT>(list); + public ReturnT> listJobByGroup(String jobGroup){ + List list = xxlJobInfoDao.getJobsByGroup(jobGroup); + return new ReturnT>(list); } @RequestMapping("/pageList") @ResponseBody public Map pageList(@RequestParam(required = false, defaultValue = "0") int start, @RequestParam(required = false, defaultValue = "10") int length, - int jobGroup, String jobName, String filterTime) { + int jobGroup, int jobId, String filterTime) { // parse param Date triggerTimeStart = null; @@ -78,8 +82,8 @@ public class JobLogController { } // page query - List list = xxlJobLogDao.pageList(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd); - int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd); + List list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd); + int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd); // package result Map maps = new HashMap(); @@ -130,8 +134,8 @@ public class JobLogController { public ReturnT logKill(int id){ // base check XxlJobLog log = xxlJobLogDao.load(id); - XxlJobInfo jobInfo = xxlJobInfoDao.load(log.getJobGroup(), log.getJobName()); - if (log == null || jobInfo==null) { + XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId()); + if (jobInfo==null) { return new ReturnT(500, "参数异常"); } if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) { @@ -146,7 +150,7 @@ public class JobLogController { e.printStackTrace(); return new ReturnT(500, e.getMessage()); } - ReturnT runResult = executorBiz.kill(String.valueOf(log.getJobGroup()), log.getJobName()); + ReturnT runResult = executorBiz.kill(jobInfo.getId()); if (ReturnT.SUCCESS_CODE == runResult.getCode()) { log.setHandleCode(ReturnT.FAIL_CODE); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/biz/AdminBizImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/biz/AdminBizImpl.java index 7f5454a9..5840c489 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/biz/AdminBizImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/biz/AdminBizImpl.java @@ -32,17 +32,17 @@ public class AdminBizImpl implements AdminBiz { // trigger success, to trigger child job, and avoid repeat trigger child job String childTriggerMsg = null; if (ReturnT.SUCCESS_CODE==handleCallbackParam.getCode() && ReturnT.SUCCESS_CODE!=log.getHandleCode()) { - XxlJobInfo xxlJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName()); + XxlJobInfo xxlJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId()); if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) { childTriggerMsg = "
"; String[] childJobKeys = xxlJobInfo.getChildJobKey().split(","); for (int i = 0; i < childJobKeys.length; i++) { String[] jobKeyArr = childJobKeys[i].split("_"); if (jobKeyArr!=null && jobKeyArr.length==2) { - XxlJobInfo childJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(Integer.valueOf(jobKeyArr[0]), jobKeyArr[1]); + XxlJobInfo childJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(Integer.valueOf(jobKeyArr[1])); if (childJobInfo!=null) { try { - boolean ret = XxlJobDynamicScheduler.triggerJob(childJobInfo.getJobName(), String.valueOf(childJobInfo.getJobGroup())); + boolean ret = XxlJobDynamicScheduler.triggerJob(String.valueOf(childJobInfo.getId()), String.valueOf(childJobInfo.getJobGroup())); // add msg childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}", 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 42a9be60..ac30dd03 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 @@ -35,12 +35,13 @@ public class RemoteHttpJobBean extends QuartzJobBean { protected void executeInternal(JobExecutionContext context) throws JobExecutionException { JobKey jobKey = context.getTrigger().getJobKey(); - - XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(Integer.valueOf(jobKey.getGroup()), jobKey.getName()); + Integer jobId = Integer.valueOf(jobKey.getName()); + XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId); + // save log XxlJobLog jobLog = new XxlJobLog(); jobLog.setJobGroup(jobInfo.getJobGroup()); - jobLog.setJobName(jobInfo.getJobName()); + jobLog.setJobId(jobInfo.getId()); XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog); logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId()); @@ -57,14 +58,13 @@ public class RemoteHttpJobBean extends QuartzJobBean { // trigger request TriggerParam triggerParam = new TriggerParam(); - triggerParam.setJobGroup(String.valueOf(jobInfo.getJobGroup())); - triggerParam.setJobName(jobInfo.getJobName()); + triggerParam.setJobId(jobInfo.getId()); triggerParam.setExecutorHandler(jobInfo.getExecutorHandler()); triggerParam.setExecutorParams(jobInfo.getExecutorParam()); triggerParam.setGlueSwitch((jobInfo.getGlueSwitch()==0)?false:true); - triggerParam.setLogAddress(adminAddressSet); triggerParam.setLogId(jobLog.getId()); triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime()); + triggerParam.setLogAddress(adminAddressSet); // parse address String groupAddressInfo = "注册方式:"; 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 cca886cd..6ca9909c 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 @@ -8,10 +8,9 @@ import java.util.Date; */ public class XxlJobInfo { - private int id; + private int id; // 主键ID (JobKey.name) - private int jobGroup; // 任务组 (执行器ID) - private String jobName; // 任务名 + private int jobGroup; // 执行器主键ID (JobKey.group) private String jobCron; // 任务执行CRON表达式 【base on quartz】 private String jobDesc; @@ -50,14 +49,6 @@ public class XxlJobInfo { this.jobGroup = jobGroup; } - public String getJobName() { - return jobName; - } - - public void setJobName(String jobName) { - this.jobName = jobName; - } - public String getJobCron() { return jobCron; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java index 6d0e0834..61e54208 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java @@ -12,7 +12,7 @@ public class XxlJobLog { // job info private int jobGroup; - private String jobName; + private int jobId; // execute info private String executorAddress; @@ -45,12 +45,12 @@ public class XxlJobLog { this.jobGroup = jobGroup; } - public String getJobName() { - return jobName; + public int getJobId() { + return jobId; } - public void setJobName(String jobName) { - this.jobName = jobName; + public void setJobId(int jobId) { + this.jobId = jobId; } public String getExecutorAddress() { diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java index c1d3ec89..c2bbab80 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java @@ -7,7 +7,7 @@ package com.xxl.job.admin.core.model; public class XxlJobLogGlue { private int id; - private int jobId; + private int jobId; // 任务主键ID private String glueSource; private String glueRemark; private String addTime; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java index 309e0d2a..d81d7866 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java @@ -143,7 +143,9 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In // fill job info public static void fillJobInfo(XxlJobInfo jobInfo) { // TriggerKey : name + group - TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup())); + String group = String.valueOf(jobInfo.getJobGroup()); + String name = String.valueOf(jobInfo.getId()); + TriggerKey triggerKey = TriggerKey.triggerKey(name, group); try { Trigger trigger = scheduler.getTrigger(triggerKey); @@ -177,7 +179,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In // addJob 新增 @SuppressWarnings("unchecked") - public static boolean addJob(String jobGroup, String jobName, String cronExpression) throws SchedulerException { + public static boolean addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); JobKey jobKey = new JobKey(jobName, jobGroup); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java index 6c2959b3..ccf1bcad 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java @@ -57,7 +57,7 @@ public class JobMonitorHelper { // pass } if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) { - XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName()); + XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId()); if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) { Set emailSet = new HashSet(Arrays.asList(info.getAlarmEmail().split(","))); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java index e5017f92..38b4c2fc 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java @@ -1,7 +1,6 @@ package com.xxl.job.admin.dao; import com.xxl.job.admin.core.model.XxlJobInfo; -import com.xxl.job.admin.core.model.XxlJobLog; import java.util.List; @@ -18,11 +17,10 @@ public interface IXxlJobInfoDao { public int save(XxlJobInfo info); public XxlJobInfo loadById(int id); - public XxlJobInfo load(int jobGroup, String jobName); public int update(XxlJobInfo item); - public int delete(int jobGroup, String jobName); + public int delete(int id); - public List getJobsByGroup(String jobGroup); + public List getJobsByGroup(String jobGroup); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java index a3e6b9b7..42412084 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java @@ -11,8 +11,8 @@ import java.util.List; */ public interface IXxlJobLogDao { - public List pageList(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd); - public int pageListCount(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd); + public List pageList(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd); + public int pageListCount(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd); public XxlJobLog load(int id); @@ -20,6 +20,6 @@ public interface IXxlJobLogDao { public int updateTriggerInfo(XxlJobLog xxlJobLog); public int updateHandleInfo(XxlJobLog xxlJobLog); - public int delete(int jobGroup, String jobName); + public int delete(int jobId); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java index bfb6210f..94f288e5 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java @@ -1,7 +1,6 @@ package com.xxl.job.admin.dao.impl; import com.xxl.job.admin.core.model.XxlJobInfo; -import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.dao.IXxlJobInfoDao; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.stereotype.Repository; @@ -52,31 +51,18 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao { return sqlSessionTemplate.selectOne("XxlJobInfoMapper.loadById", id); } - @Override - public XxlJobInfo load(int jobGroup, String jobName) { - HashMap params = new HashMap(); - params.put("jobGroup", jobGroup); - params.put("jobName", jobName); - - return sqlSessionTemplate.selectOne("XxlJobInfoMapper.load", params); - } - @Override public int update(XxlJobInfo item) { return sqlSessionTemplate.update("XxlJobInfoMapper.update", item); } @Override - public int delete(int jobGroup, String jobName) { - HashMap params = new HashMap(); - params.put("jobGroup", jobGroup); - params.put("jobName", jobName); - - return sqlSessionTemplate.update("XxlJobInfoMapper.delete", params); + public int delete(int id) { + return sqlSessionTemplate.update("XxlJobInfoMapper.delete", id); } @Override - public List getJobsByGroup(String jobGroup) { + public List getJobsByGroup(String jobGroup) { return sqlSessionTemplate.selectList("XxlJobInfoMapper.getJobsByGroup", jobGroup); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java index fd024ffd..df9cfbb4 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java @@ -21,12 +21,12 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao { public SqlSessionTemplate sqlSessionTemplate; @Override - public List pageList(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) { + public List pageList(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd) { HashMap params = new HashMap(); params.put("offset", offset); params.put("pagesize", pagesize); params.put("jobGroup", jobGroup); - params.put("jobName", jobName); + params.put("jobId", jobId); params.put("triggerTimeStart", triggerTimeStart); params.put("triggerTimeEnd", triggerTimeEnd); @@ -34,12 +34,12 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao { } @Override - public int pageListCount(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) { + public int pageListCount(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd) { HashMap params = new HashMap(); params.put("offset", offset); params.put("pagesize", pagesize); params.put("jobGroup", jobGroup); - params.put("jobName", jobName); + params.put("jobId", jobId); params.put("triggerTimeStart", triggerTimeStart); params.put("triggerTimeEnd", triggerTimeEnd); @@ -73,11 +73,8 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao { } @Override - public int delete(int jobGroup, String jobName) { - HashMap params = new HashMap(); - params.put("jobGroup", jobGroup); - params.put("jobName", jobName); - return sqlSessionTemplate.delete("XxlJobLogMapper.delete", params); + public int delete(int jobId) { + return sqlSessionTemplate.delete("XxlJobLogMapper.delete", jobId); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java index b3e269c4..8fc521bd 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java @@ -19,12 +19,12 @@ public interface IXxlJobService { public ReturnT reschedule(XxlJobInfo jobInfo); - public ReturnT remove(int jobGroup, String jobName); + public ReturnT remove(int id); - public ReturnT pause(int jobGroup, String jobName); + public ReturnT pause(int id); - public ReturnT resume(int jobGroup, String jobName); + public ReturnT resume(int id); - public ReturnT triggerJob(int jobGroup, String jobName); + public ReturnT triggerJob(int id); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java index 0bcbe00d..2e53e375 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java @@ -11,7 +11,6 @@ import com.xxl.job.admin.dao.IXxlJobLogGlueDao; import com.xxl.job.admin.service.IXxlJobService; import com.xxl.job.core.biz.model.ReturnT; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.FastDateFormat; import org.quartz.CronExpression; import org.quartz.SchedulerException; import org.slf4j.Logger; @@ -20,7 +19,6 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.MessageFormat; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -98,53 +96,20 @@ public class XxlJobServiceImpl implements IXxlJobService { if (childJobKeyArr.length!=2) { return new ReturnT(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem)); } - XxlJobInfo childJobInfo = xxlJobInfoDao.load(Integer.valueOf(childJobKeyArr[0]), childJobKeyArr[1]); + XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1])); if (childJobInfo==null) { return new ReturnT(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem)); } } } - // generate jobName - String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date()); - jobInfo.setJobName(jobName); - try { - if (XxlJobDynamicScheduler.checkExists(jobName, String.valueOf(jobInfo.getJobGroup()))) { - return new ReturnT(500, "系统繁忙,请稍后重试"); - } - } catch (SchedulerException e1) { - e1.printStackTrace(); - return new ReturnT(500, "系统繁忙,请稍后重试"); + // add in db + xxlJobInfoDao.save(jobInfo); + int jobId = jobInfo.getId(); + if (jobId < 1) { + return new ReturnT(500, "新增任务失败"); } - - // Backup to the database - /*XxlJobInfo jobInfo = new XxlJobInfo(); - jobInfo.setJobGroup(jobGroup); - jobInfo.setJobName(jobName); - jobInfo.setJobCron(jobCron); - jobInfo.setJobDesc(jobDesc); - jobInfo.setAuthor(author); - jobInfo.setAlarmEmail(alarmEmail); - jobInfo.setExecutorHandler(executorHandler); - jobInfo.setExecutorParam(executorParam); - jobInfo.setGlueSwitch(glueSwitch); - jobInfo.setGlueSource(glueSource); - jobInfo.setGlueRemark(glueRemark); - jobInfo.setChildJobKey(childJobKey);*/ - - try { - // add job 2 quartz - boolean result = XxlJobDynamicScheduler.addJob(String.valueOf(jobInfo.getJobGroup()), jobName, jobInfo.getJobCron()); - if (result) { - xxlJobInfoDao.save(jobInfo); - return ReturnT.SUCCESS; - } else { - return new ReturnT(500, "新增任务失败"); - } - } catch (SchedulerException e) { - logger.error("", e); - } - return ReturnT.FAIL; + return ReturnT.SUCCESS; } @Override @@ -178,7 +143,7 @@ public class XxlJobServiceImpl implements IXxlJobService { if (childJobKeyArr.length!=2) { return new ReturnT(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem)); } - XxlJobInfo childJobInfo = xxlJobInfoDao.load(Integer.valueOf(childJobKeyArr[0]), childJobKeyArr[1]); + XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1])); if (childJobInfo==null) { return new ReturnT(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem)); } @@ -203,7 +168,7 @@ public class XxlJobServiceImpl implements IXxlJobService { try { // fresh quartz - boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), exists_jobInfo.getJobName(), exists_jobInfo.getJobCron()); + boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), String.valueOf(exists_jobInfo.getId()), exists_jobInfo.getJobCron()); if (ret) { xxlJobInfoDao.update(exists_jobInfo); return ReturnT.SUCCESS; @@ -217,14 +182,16 @@ public class XxlJobServiceImpl implements IXxlJobService { } @Override - public ReturnT remove(int jobGroup, String jobName) { - XxlJobInfo xxlJobInfo = xxlJobInfoDao.load(jobGroup, jobName); + public ReturnT remove(int id) { + XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); + String group = String.valueOf(xxlJobInfo.getJobGroup()); + String name = String.valueOf(xxlJobInfo.getId()); try { - XxlJobDynamicScheduler.removeJob(jobName, String.valueOf(jobGroup)); - xxlJobInfoDao.delete(jobGroup, jobName); - xxlJobLogDao.delete(jobGroup, jobName); - xxlJobLogGlueDao.deleteByJobId(xxlJobInfo.getId()); + XxlJobDynamicScheduler.removeJob(name, group); + xxlJobInfoDao.delete(id); + xxlJobLogDao.delete(id); + xxlJobLogGlueDao.deleteByJobId(id); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); @@ -233,9 +200,13 @@ public class XxlJobServiceImpl implements IXxlJobService { } @Override - public ReturnT pause(int jobGroup, String jobName) { + public ReturnT pause(int id) { + XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); + String group = String.valueOf(xxlJobInfo.getJobGroup()); + String name = String.valueOf(xxlJobInfo.getId()); + try { - XxlJobDynamicScheduler.pauseJob(jobName, String.valueOf(jobGroup)); // jobStatus do not store + XxlJobDynamicScheduler.pauseJob(name, group); // jobStatus do not store return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); @@ -244,10 +215,19 @@ public class XxlJobServiceImpl implements IXxlJobService { } @Override - public ReturnT resume(int jobGroup, String jobName) { + public ReturnT resume(int id) { + XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); + String group = String.valueOf(xxlJobInfo.getJobGroup()); + String name = String.valueOf(xxlJobInfo.getId()); + try { - XxlJobDynamicScheduler.resumeJob(jobName, String.valueOf(jobGroup)); - return ReturnT.SUCCESS; + boolean ret = false; + if (XxlJobDynamicScheduler.checkExists(name, group)) { + ret = XxlJobDynamicScheduler.resumeJob(name, group); + } else { + ret = XxlJobDynamicScheduler.addJob(name, group, xxlJobInfo.getJobCron()); + } + return ret?ReturnT.SUCCESS:ReturnT.FAIL; } catch (SchedulerException e) { e.printStackTrace(); return ReturnT.FAIL; @@ -255,9 +235,13 @@ public class XxlJobServiceImpl implements IXxlJobService { } @Override - public ReturnT triggerJob(int jobGroup, String jobName) { + public ReturnT triggerJob(int id) { + XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); + String group = String.valueOf(xxlJobInfo.getJobGroup()); + String name = String.valueOf(xxlJobInfo.getId()); + try { - XxlJobDynamicScheduler.triggerJob(jobName, String.valueOf(jobGroup)); + XxlJobDynamicScheduler.triggerJob(name, group); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); 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 cc5b1aa4..7dd9c0dd 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml @@ -7,7 +7,6 @@ - @@ -31,7 +30,6 @@ t.id, t.job_group, - t.job_name, t.job_cron, t.job_desc, t.add_time, @@ -74,11 +72,10 @@ - + INSERT INTO XXL_JOB_QRTZ_TRIGGER_INFO ( job_group, - job_name, job_cron, job_desc, add_time, @@ -93,8 +90,7 @@ glue_remark, child_jobkey ) VALUES ( - #{jobGroup}, - #{jobName}, + #{jobGroup}, #{jobCron}, #{jobDesc}, NOW(), @@ -109,9 +105,10 @@ #{glueRemark}, #{childJobKey} ); - - SELECT LAST_INSERT_ID() - + - - UPDATE XXL_JOB_QRTZ_TRIGGER_INFO @@ -142,17 +132,13 @@ glue_source = #{glueSource}, glue_remark = #{glueRemark}, child_jobkey = #{childJobKey} - WHERE job_group = #{jobGroup} - AND job_name = #{jobName} + WHERE id = #{id} DELETE - FROM - XXL_JOB_QRTZ_TRIGGER_INFO - WHERE - job_group = #{jobGroup} - AND job_name = #{jobName} + FROM XXL_JOB_QRTZ_TRIGGER_INFO + WHERE id = #{id} +
@@ -74,7 +74,6 @@ id jobGroup - jobName 任务Key 描述 Cron diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl index b0f4457d..35b06069 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl @@ -35,19 +35,19 @@
执行器 - + <#list JobGroupList as group> - +
- 描述 - +
@@ -76,8 +76,8 @@ id - 任务组 - 任务名 + 执行器ID + 任务ID 执行器地址 JobHandler 任务参数 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 ed01fa69..a2062067 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 @@ -34,12 +34,11 @@ $(function() { return data; } }, - { "data": 'jobName', "visible" : false}, { "data": 'childJobKey', "visible" : true, "render": function ( data, type, row ) { - var jobKey = row.jobGroup + "_" + row.jobName; + var jobKey = row.jobGroup + "_" + row.id; return jobKey; } }, @@ -76,7 +75,7 @@ $(function() { "render": function ( data, type, row ) { if ('NORMAL' == data) { return ''+ data +''; - } else if ('PAUSED' == data){ + } else if ('PAUSED' == data || 'NONE' == data){ return ''+ data +''; } else if ('BLOCKED' == data){ return ''+ data +''; @@ -91,11 +90,11 @@ $(function() { var pause_resume = ""; if ('NORMAL' == row.jobStatus) { pause_resume = ' '; - } else if ('PAUSED' == row.jobStatus){ + } else if ('PAUSED' == row.jobStatus || 'NONE' == row.jobStatus){ pause_resume = ' '; } // log url - var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName; + var logUrl = base_url +'/joblog?jobId='+ row.id; // log url var codeBtn = ""; @@ -107,7 +106,6 @@ $(function() { // html var html = '

请选择'); - $.each(data.content, function (n, value) { - $("#jobName").append(''); + $("#jobId").html(''); + $.each(data.content, function (n, value) { + $("#jobId").append(''); }); - if ($("#jobName").attr("paramVal")){ - $("#jobName").find("option[value='" + $("#jobName").attr("paramVal") + "']").attr("selected",true); - $("#jobName").attr("paramVal") + if ($("#jobId").attr("paramVal")){ + $("#jobId").find("option[value='" + $("#jobId").attr("paramVal") + "']").attr("selected",true); } } else { ComAlertTec.show(data.msg); @@ -29,7 +27,6 @@ $(function() { if ($("#jobGroup").attr("paramVal")){ $("#jobGroup").find("option[value='" + $("#jobGroup").attr("paramVal") + "']").attr("selected",true); $("#jobGroup").change(); - $("#jobGroup").attr("") } // 过滤时间 @@ -70,7 +67,7 @@ $(function() { data : function ( d ) { var obj = {}; obj.jobGroup = $('#jobGroup').val(); - obj.jobName = $('#jobName').val(); + obj.jobId = $('#jobId').val(); obj.filterTime = $('#filterTime').val(); obj.start = d.start; obj.length = d.length; @@ -82,21 +79,8 @@ $(function() { //"scrollX": false, "columns": [ { "data": 'id', "bSortable": false, "visible" : false}, - { - "data": 'jobGroup', - "visible" : false, - "bSortable": false, - "render": function ( data, type, row ) { - var groupMenu = $("#jobGroup").find("option"); - for ( var index in $("#jobGroup").find("option")) { - if ($(groupMenu[index]).attr('value') == data) { - return $(groupMenu[index]).html(); - } - } - return data; - } - }, - { "data": 'jobName', "visible" : false}, + { "data": 'jobGroup', "visible" : false}, + { "data": 'jobId', "visible" : false}, { "data": 'executorAddress', "visible" : true}, { "data": 'executorHandler', diff --git a/xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java index d3687363..133dafe9 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java @@ -29,19 +29,19 @@ public class XxlJobInfoTest { @Test public void save_load(){ XxlJobInfo info = new XxlJobInfo(); - info.setJobName("job_name"); + info.setJobGroup(1); info.setJobCron("jobCron"); int count = xxlJobInfoDao.save(info); System.out.println(count); System.out.println(info.getId()); - - XxlJobInfo item = xxlJobInfoDao.load(0 ,"job_name"); + + XxlJobInfo item = xxlJobInfoDao.loadById(2); System.out.println(item); } @Test public void update(){ - XxlJobInfo item = xxlJobInfoDao.load(0 ,"job_name"); + XxlJobInfo item = xxlJobInfoDao.loadById(2); item.setJobCron("jobCron2"); xxlJobInfoDao.update(item); diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java index 91844a2d..7fbaa8b0 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java @@ -16,11 +16,10 @@ public interface ExecutorBiz { /** * kill - * @param jobGroup - * @param jobName + * @param jobId * @return */ - public ReturnT kill(String jobGroup, String jobName); + public ReturnT kill(int jobId); /** * log diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java index a8b6960e..43978d39 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java @@ -23,19 +23,15 @@ public class ExecutorBizImpl implements ExecutorBiz { } @Override - public ReturnT kill(String jobGroup, String jobName) { - - // generate jobKey - String jobKey = jobGroup.concat("_").concat(jobName); - + public ReturnT kill(int jobId) { // kill handlerThread, and create new one - JobThread jobThread = XxlJobExecutor.loadJobThread(jobKey); + JobThread jobThread = XxlJobExecutor.loadJobThread(jobId); if (jobThread != null) { IJobHandler handler = jobThread.getHandler(); jobThread.toStop("人工手动终止"); jobThread.interrupt(); - XxlJobExecutor.removeJobThread(jobKey); + XxlJobExecutor.removeJobThread(jobId); return ReturnT.SUCCESS; } @@ -53,11 +49,8 @@ public class ExecutorBizImpl implements ExecutorBiz { @Override public ReturnT run(TriggerParam triggerParam) { - // generate jobKey - String jobKey = triggerParam.getJobGroup().concat("_").concat(triggerParam.getJobName()); - // load old thread - JobThread jobThread = XxlJobExecutor.loadJobThread(jobKey); + JobThread jobThread = XxlJobExecutor.loadJobThread(triggerParam.getJobId()); if (!triggerParam.isGlueSwitch()) { // bean model @@ -65,11 +58,11 @@ public class ExecutorBizImpl implements ExecutorBiz { // valid handler instance IJobHandler jobHandler = XxlJobExecutor.loadJobHandler(triggerParam.getExecutorHandler()); if (jobHandler==null) { - return new ReturnT(ReturnT.FAIL_CODE, "job handler for jobKey=[" + jobKey + "] not found."); + return new ReturnT(ReturnT.FAIL_CODE, "job handler for JobId=[" + triggerParam.getJobId() + "] not found."); } if (jobThread == null) { - jobThread = XxlJobExecutor.registJobThread(jobKey, jobHandler); + jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), jobHandler); } else { // job handler update, kill old job thread if (jobThread.getHandler() != jobHandler) { @@ -78,7 +71,7 @@ public class ExecutorBizImpl implements ExecutorBiz { jobThread.interrupt(); // new thread, with new job handler - jobThread = XxlJobExecutor.registJobThread(jobKey, jobHandler); + jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), jobHandler); } } } else { @@ -86,11 +79,11 @@ public class ExecutorBizImpl implements ExecutorBiz { // valid glueloader if (!GlueFactory.isActive()) { - return new ReturnT(ReturnT.FAIL_CODE, "glueLoader for jobKey=[" + jobKey + "] not found."); + return new ReturnT(ReturnT.FAIL_CODE, "glueLoader for JobId=[" + triggerParam.getJobId() + "] not found."); } if (jobThread == null) { - jobThread = XxlJobExecutor.registJobThread(jobKey, new GlueJobHandler(triggerParam.getJobGroup(), triggerParam.getJobName())); + jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), new GlueJobHandler(triggerParam.getJobId())); } else { // job handler update, kill old job thread if (!(jobThread.getHandler() instanceof GlueJobHandler)) { @@ -99,7 +92,7 @@ public class ExecutorBizImpl implements ExecutorBiz { jobThread.interrupt(); // new thread, with new job handler - jobThread = XxlJobExecutor.registJobThread(jobKey, new GlueJobHandler(triggerParam.getJobGroup(), triggerParam.getJobName())); + jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), new GlueJobHandler(triggerParam.getJobId())); } } } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java index f2a0ef35..0cc17715 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java @@ -9,42 +9,24 @@ import java.util.Set; public class TriggerParam implements Serializable{ private static final long serialVersionUID = 42L; - private String action; - - private String jobGroup; - private String jobName; + private int jobId; private String executorHandler; private String executorParams; private boolean glueSwitch; - private Set logAddress; private int logId; private long logDateTim; - public String getAction() { - return action; + private Set logAddress; + + public int getJobId() { + return jobId; } - public void setAction(String action) { - this.action = action; - } - - public String getJobGroup() { - return jobGroup; - } - - public void setJobGroup(String jobGroup) { - this.jobGroup = jobGroup; - } - - public String getJobName() { - return jobName; - } - - public void setJobName(String jobName) { - this.jobName = jobName; + public void setJobId(int jobId) { + this.jobId = jobId; } public String getExecutorHandler() { @@ -71,14 +53,6 @@ public class TriggerParam implements Serializable{ this.glueSwitch = glueSwitch; } - public Set getLogAddress() { - return logAddress; - } - - public void setLogAddress(Set logAddress) { - this.logAddress = logAddress; - } - public int getLogId() { return logId; } @@ -95,18 +69,11 @@ public class TriggerParam implements Serializable{ this.logDateTim = logDateTim; } - @Override - public String toString() { - return "RequestModel{" + - ", action='" + action + '\'' + - ", jobGroup='" + jobGroup + '\'' + - ", jobName='" + jobName + '\'' + - ", executorHandler='" + executorHandler + '\'' + - ", executorParams='" + executorParams + '\'' + - ", glueSwitch=" + glueSwitch + - ", logAddress=" + logAddress + - ", logId=" + logId + - ", logDateTim=" + logDateTim + - '}'; + public Set getLogAddress() { + return logAddress; + } + + public void setLogAddress(Set logAddress) { + this.logAddress = logAddress; } } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index 7b626665..d2339e2c 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -61,7 +61,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe // job thread repository destory if (JobThreadRepository.size() > 0) { - for (Map.Entry item: JobThreadRepository.entrySet()) { + for (Map.Entry item: JobThreadRepository.entrySet()) { JobThread jobThread = item.getValue(); jobThread.toStop("Web容器销毁终止"); jobThread.interrupt(); @@ -114,20 +114,20 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe } // ---------------------------------- job thread repository - private static ConcurrentHashMap JobThreadRepository = new ConcurrentHashMap(); - public static JobThread registJobThread(String jobkey, IJobHandler handler){ + private static ConcurrentHashMap JobThreadRepository = new ConcurrentHashMap(); + public static JobThread registJobThread(int jobId, IJobHandler handler){ JobThread jobThread = new JobThread(handler); jobThread.start(); - logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobkey:{}, handler:{}", new Object[]{jobkey, handler}); - JobThreadRepository.put(jobkey, jobThread); // putIfAbsent | oh my god, map's put method return the old value!!! + logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobId:{}, handler:{}", new Object[]{jobId, handler}); + JobThreadRepository.put(jobId, jobThread); // putIfAbsent | oh my god, map's put method return the old value!!! return jobThread; } - public static JobThread loadJobThread(String jobKey){ - JobThread jobThread = JobThreadRepository.get(jobKey); + public static JobThread loadJobThread(int jobId){ + JobThread jobThread = JobThreadRepository.get(jobId); return jobThread; } - public static void removeJobThread(String jobKey){ - JobThreadRepository.remove(jobKey); + public static void removeJobThread(int jobId){ + JobThreadRepository.remove(jobId); } } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java b/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java index e9f04502..1ebbe304 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java @@ -112,11 +112,11 @@ public class GlueFactory implements ApplicationContextAware { // ----------------------------- load instance ----------------------------- // load new instance, prototype - public IJobHandler loadNewInstance(String job_group, String job_name) throws Exception{ - if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) { + public IJobHandler loadNewInstance(int jobId) throws Exception{ + if (jobId==0) { return null; } - String codeSource = glueLoader.load(job_group, job_name); + String codeSource = glueLoader.load(jobId); if (codeSource!=null && codeSource.trim().length()>0) { Class clazz = groovyClassLoader.parseClass(codeSource); if (clazz != null) { @@ -136,14 +136,14 @@ public class GlueFactory implements ApplicationContextAware { } // // load instance, singleton - private static String generateInstanceCacheKey(String job_group, String job_name){ - return job_group.concat("_").concat(job_name).concat("_instance"); + private static String generateInstanceCacheKey(int jobId){ + return String.valueOf(jobId).concat("_instance"); } - public IJobHandler loadInstance(String job_group, String job_name) throws Exception{ - if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) { + public IJobHandler loadInstance(int jobId) throws Exception{ + if (jobId==0) { return null; } - String cacheInstanceKey = generateInstanceCacheKey(job_group, job_name); + String cacheInstanceKey = generateInstanceCacheKey(jobId); Object cacheInstance = LocalCache.getInstance().get(cacheInstanceKey); if (cacheInstance!=null) { if (!(cacheInstance instanceof IJobHandler)) { @@ -152,7 +152,7 @@ public class GlueFactory implements ApplicationContextAware { } return (IJobHandler) cacheInstance; } - Object instance = loadNewInstance(job_group, job_name); + Object instance = loadNewInstance(jobId); if (instance!=null) { if (!(instance instanceof IJobHandler)) { throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadInstance error, " @@ -167,8 +167,8 @@ public class GlueFactory implements ApplicationContextAware { } // ----------------------------- util ----------------------------- - public static void glue(String job_group, String job_name, String... params) throws Exception{ - GlueFactory.glueFactory.loadInstance(job_group, job_name).execute(params); + public static void glue(int jobId, String... params) throws Exception{ + GlueFactory.glueFactory.loadInstance(jobId).execute(params); } } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java b/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java index 35459715..04a4d7e7 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java @@ -8,10 +8,9 @@ public interface GlueLoader { /** * load code source by name, ensure every load is the latest. - * @param job_group - * @param job_name + * @param jobId * @return code source */ - public String load(String job_group, String job_name); + public String load(int jobId); } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java b/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java index 303eb2fb..2d23516b 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java @@ -18,9 +18,9 @@ public class DbGlueLoader implements GlueLoader { } @Override - public String load(String job_group, String job_name) { - String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE job_group = ? AND job_name = ?"; - List> result = DBUtil.query(dataSource, sql, new String[]{job_group, job_name}); + public String load(int jobId) { + String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE id = ?"; + List> result = DBUtil.query(dataSource, sql, new Object[]{jobId}); if (result!=null && result.size()==1 && result.get(0)!=null && result.get(0).get("glue_source")!=null ) { return (String) result.get(0).get("glue_source"); } 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 0fc3ca50..d7a84a94 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 @@ -9,16 +9,14 @@ import com.xxl.job.core.handler.IJobHandler; */ public class GlueJobHandler extends IJobHandler { - private String job_group; - private String job_name; - public GlueJobHandler(String job_group, String job_name) { - this.job_group = job_group; - this.job_name = job_name; + private int jobId; + public GlueJobHandler(int jobId) { + this.jobId = jobId; } @Override public void execute(String... params) throws Exception { - GlueFactory.glue(job_group, job_name, params); + GlueFactory.glue(jobId, params); } }