diff --git a/README.md b/README.md index 66950ab4b9a87091106557e3197db05fb3967c74..0c67324fad8b9f2694e9dce6d0749edf3c7fdcc7 100644 --- a/README.md +++ b/README.md @@ -88,10 +88,10 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是 ![输入图片说明](https://static.oschina.net/uploads/img/201703/07162326_L3VB.png "在这里输入图片标题") #### 1.5 环境 +- Servlet/JSP Spec:3.0/2.2 - JDK:1.7+ -- Tomcat:7+ +- Tomcat:7+/Jetty8+ - Mysql:5.6+ -- Servlet/JSP Spec:3.0/2.2 - Maven:3+ 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 7a1acaff8e62eb57efcd61b681c702feff68d89a..50cd952a0747f38a99db21e7cb50e78b651acb88 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 @@ -5,7 +5,6 @@ import com.xxl.job.admin.core.model.XxlJobLogGlue; import com.xxl.job.admin.dao.IXxlJobInfoDao; import com.xxl.job.admin.dao.IXxlJobLogGlueDao; import com.xxl.job.core.biz.model.ReturnT; -import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,9 +27,9 @@ public class JobCodeController { private IXxlJobLogGlueDao xxlJobLogGlueDao; @RequestMapping - public String index(Model model, int jobGroup, String jobName) { - XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName); - List jobLogGlues = xxlJobLogGlueDao.selectList(jobGroup, jobName); + public String index(Model model, int jobId) { + XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId); + List jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId); model.addAttribute("jobInfo", jobInfo); model.addAttribute("jobLogGlues", jobLogGlues); return "jobcode/jobcode.index"; @@ -38,7 +37,7 @@ public class JobCodeController { @RequestMapping("/save") @ResponseBody - public ReturnT save(Model model, int jobGroup, String jobName, String glueSource, String glueRemark) { + public ReturnT save(Model model, int id, String glueSource, String glueRemark) { // valid if (glueRemark==null) { return new ReturnT(500, "请输入备注"); @@ -46,31 +45,26 @@ public class JobCodeController { if (glueRemark.length()<6 || glueRemark.length()>100) { return new ReturnT(500, "备注长度应该在6至100之间"); } - XxlJobInfo jobInfoOld = xxlJobInfoDao.load(jobGroup, jobName); - if (jobInfoOld == null) { - return new ReturnT(500, "任务不存在"); + XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(id); + if (exists_jobInfo == null) { + return new ReturnT(500, "参数异常"); } // log old code XxlJobLogGlue xxlJobLogGlue = new XxlJobLogGlue(); - xxlJobLogGlue.setJobGroup(jobInfoOld.getJobGroup()); - xxlJobLogGlue.setJobName(jobInfoOld.getJobName()); - xxlJobLogGlue.setGlueSource(jobInfoOld.getGlueSource()); - xxlJobLogGlue.setGlueRemark(jobInfoOld.getGlueRemark()); - - // init new code - jobInfoOld.setGlueSource(glueSource); - jobInfoOld.setGlueRemark(glueRemark); - - // update new code ,and log old code - xxlJobInfoDao.update(jobInfoOld); - if (StringUtils.isNotBlank(xxlJobLogGlue.getGlueSource()) && StringUtils.isNotBlank(xxlJobLogGlue.getGlueRemark())) { - xxlJobLogGlueDao.save(xxlJobLogGlue); - // remove code backup more than 30 - xxlJobLogGlueDao.removeOld(xxlJobLogGlue.getJobGroup(), xxlJobLogGlue.getJobName(), 30); - } - + xxlJobLogGlue.setJobId(exists_jobInfo.getId()); + xxlJobLogGlue.setGlueSource(exists_jobInfo.getGlueSource()); + xxlJobLogGlue.setGlueRemark(exists_jobInfo.getGlueRemark()); + xxlJobLogGlueDao.save(xxlJobLogGlue); + // update new code + exists_jobInfo.setGlueSource(glueSource); + exists_jobInfo.setGlueRemark(glueRemark); + xxlJobInfoDao.update(exists_jobInfo); + + // remove code backup more than 30 + xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 3); + 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 2cdf91c2c433bcf65a15f8783074eb09eb457ad1..434f7ebd0ef90ab34fcbd108903d85b7368e8335 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 @@ -1,6 +1,8 @@ package com.xxl.job.admin.controller; import com.xxl.job.admin.core.model.XxlJobGroup; +import com.xxl.job.admin.core.model.XxlJobInfo; +import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.dao.IXxlJobGroupDao; import com.xxl.job.admin.service.IXxlJobService; import com.xxl.job.core.biz.model.ReturnT; @@ -30,9 +32,11 @@ public class JobInfoController { @RequestMapping public String index(Model model) { + // 路由策略-列表 + model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values()); + // 任务组 List jobGroupList = xxlJobGroupDao.findAll(); - model.addAttribute("JobGroupList", jobGroupList); return "jobinfo/jobinfo.index"; } @@ -48,21 +52,14 @@ public class JobInfoController { @RequestMapping("/add") @ResponseBody - public ReturnT add(int jobGroup, String jobCron, String jobDesc, String author, String alarmEmail, - String executorHandler, String executorParam, int glueSwitch, String glueSource, String glueRemark, String childJobKey) { - - return xxlJobService.add(jobGroup, jobCron, jobDesc, author, alarmEmail, - executorHandler, executorParam, - glueSwitch, glueSource, glueRemark, childJobKey); + public ReturnT add(XxlJobInfo jobInfo) { + return xxlJobService.add(jobInfo); } @RequestMapping("/reschedule") @ResponseBody - public ReturnT reschedule(int jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, - String executorHandler, String executorParam, int glueSwitch, String childJobKey) { - - return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, author, alarmEmail, - executorHandler, executorParam, glueSwitch, childJobKey); + public ReturnT reschedule(XxlJobInfo jobInfo) { + return xxlJobService.reschedule(jobInfo); } @RequestMapping("/remove") 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 0c376bd7f8252a5e6bf4d89def4e8c5d80782bea..c1d3ec8915ae98d129704a108a1501eb1f1787e9 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,63 +7,69 @@ package com.xxl.job.admin.core.model; public class XxlJobLogGlue { private int id; - - private int jobGroup; - private String jobName; - + private int jobId; private String glueSource; private String glueRemark; private String addTime; private String updateTime; - + public int getId() { return id; } + public void setId(int id) { this.id = id; } - public int getJobGroup() { - return jobGroup; - } - public void setJobGroup(int jobGroup) { - 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 getGlueSource() { return glueSource; } + public void setGlueSource(String glueSource) { this.glueSource = glueSource; } + public String getGlueRemark() { return glueRemark; } + public void setGlueRemark(String glueRemark) { this.glueRemark = glueRemark; } + public String getAddTime() { return addTime; } + public void setAddTime(String addTime) { this.addTime = addTime; } + public String getUpdateTime() { return updateTime; } + public void setUpdateTime(String updateTime) { this.updateTime = updateTime; } - + @Override public String toString() { - return "XxlJobLogGlue [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", glueSource=" - + glueSource + ", glueRemark=" + glueRemark + ", addTime=" + addTime + ", updateTime=" + updateTime - + "]"; + return "XxlJobLogGlue{" + + "id=" + id + + ", jobId=" + jobId + + ", glueSource='" + glueSource + '\'' + + ", glueRemark='" + glueRemark + '\'' + + ", addTime='" + addTime + '\'' + + ", updateTime='" + updateTime + '\'' + + '}'; } - } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java index 9ab89b50ceaf0b32e2ebfee8100bed518d63fee9..99244d2b22537d4f78176ac2e885d8ddef04fad4 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java @@ -32,9 +32,11 @@ public enum ExecutorRouteStrategyEnum { } public static ExecutorRouteStrategyEnum match(String name, ExecutorRouteStrategyEnum defaultItem){ - for (ExecutorRouteStrategyEnum item: ExecutorRouteStrategyEnum.values()) { - if (item.name().equals(name)) { - return item; + if (name != null) { + for (ExecutorRouteStrategyEnum item: ExecutorRouteStrategyEnum.values()) { + if (item.name().equals(name)) { + return item; + } } } return defaultItem; 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 2ebaf912c589b315c79dd47cd64e45cadb2be8e3..e5017f92ac7bffb778e3f754608e08f7d624b6db 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 @@ -16,7 +16,8 @@ public interface IXxlJobInfoDao { public int pageListCount(int offset, int pagesize, int jobGroup, String executorHandler); public int save(XxlJobInfo info); - + + public XxlJobInfo loadById(int id); public XxlJobInfo load(int jobGroup, String jobName); public int update(XxlJobInfo item); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogGlueDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogGlueDao.java index 2813b0882f10d0f6c15ee46b7912af6b5e9c8f02..1ced72b63e22610bb1bcebb9278cc04c2e96bfee 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogGlueDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogGlueDao.java @@ -12,10 +12,10 @@ public interface IXxlJobLogGlueDao { public int save(XxlJobLogGlue xxlJobLogGlue); - public List selectList(int jobGroup, String jobName); + public List findByJobId(int jobId); - public int removeOld(int jobGroup, String jobName, int limit); + public int removeOld(int jobId, int limit); - public int delete(int jobGroup, String jobName); + public int deleteByJobId(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 596f26a7a42c7f4d966758fa4e30afc19e493109..bfb6210fee646b97383988565dfd8bfaa2ad6e54 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 @@ -47,6 +47,11 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao { return sqlSessionTemplate.insert("XxlJobInfoMapper.save", info); } + @Override + public XxlJobInfo loadById(int id) { + return sqlSessionTemplate.selectOne("XxlJobInfoMapper.loadById", id); + } + @Override public XxlJobInfo load(int jobGroup, String jobName) { HashMap params = new HashMap(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogGlueDaoImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogGlueDaoImpl.java index 4214a71ffa629dc0e047030773cc9872988241df..7f6e4ded1cbfc361efd879989cea7b970325e993 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogGlueDaoImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogGlueDaoImpl.java @@ -25,28 +25,21 @@ public class XxlJobLogGlueDaoImpl implements IXxlJobLogGlueDao { } @Override - public List selectList(int jobGroup, String jobName) { - HashMap params = new HashMap(); - params.put("jobGroup", jobGroup); - params.put("jobName", jobName); - return sqlSessionTemplate.selectList("XxlJobLogGlueMapper.selectList", params); + public List findByJobId(int jobId) { + return sqlSessionTemplate.selectList("XxlJobLogGlueMapper.findByJobId", jobId); } @Override - public int removeOld(int jobGroup, String jobName, int limit) { + public int removeOld(int jobId, int limit) { HashMap params = new HashMap(); - params.put("jobGroup", jobGroup); - params.put("jobName", jobName); + params.put("jobId", jobId); params.put("limit", limit); return sqlSessionTemplate.delete("XxlJobLogGlueMapper.removeOld", params); } @Override - public int delete(int jobGroup, String jobName) { - HashMap params = new HashMap(); - params.put("jobGroup", jobGroup); - params.put("jobName", jobName); - return sqlSessionTemplate.delete("XxlJobLogGlueMapper.delete", params); + public int deleteByJobId(int jobId) { + return sqlSessionTemplate.delete("XxlJobLogGlueMapper.deleteByJobId", 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 1a3695c5f89098a95d5a4bddbf9c6ec3e3e56e23..b3e269c488facc210bed1e6a1cba63b68897432a 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 @@ -1,6 +1,7 @@ package com.xxl.job.admin.service; +import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.core.biz.model.ReturnT; import java.util.Map; @@ -14,11 +15,9 @@ public interface IXxlJobService { public Map pageList(int start, int length, int jobGroup, String executorHandler, String filterTime); - public ReturnT add(int jobGroup, String jobCron, String jobDesc, String author, String alarmEmail, - String executorHandler, String executorParam, int glueSwitch, String glueSource, String glueRemark, String childJobKey); + public ReturnT add(XxlJobInfo jobInfo); - public ReturnT reschedule(int jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, - String executorHandler, String executorParam, int glueSwitch, String childJobKey); + public ReturnT reschedule(XxlJobInfo jobInfo); public ReturnT remove(int jobGroup, String jobName); 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 64a4ecc07b004cd0aa9ea684bf42025323b1b840..0bcbe00dae4503a3c78a0c5c5120971629aa9fbb 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 @@ -2,6 +2,7 @@ package com.xxl.job.admin.service.impl; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobInfo; +import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler; import com.xxl.job.admin.dao.IXxlJobGroupDao; import com.xxl.job.admin.dao.IXxlJobInfoDao; @@ -64,33 +65,34 @@ public class XxlJobServiceImpl implements IXxlJobService { } @Override - public ReturnT add(int jobGroup, String jobCron, String jobDesc, String author, String alarmEmail, - String executorHandler, String executorParam, - int glueSwitch, String glueSource, String glueRemark, String childJobKey) { + public ReturnT add(XxlJobInfo jobInfo) { // valid - XxlJobGroup group = xxlJobGroupDao.load(jobGroup); + XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup()); if (group == null) { return new ReturnT(500, "请选择“执行器”"); } - if (!CronExpression.isValidExpression(jobCron)) { + if (!CronExpression.isValidExpression(jobInfo.getJobCron())) { return new ReturnT(500, "请输入格式正确的“Cron”"); } - if (StringUtils.isBlank(jobDesc)) { + if (StringUtils.isBlank(jobInfo.getJobDesc())) { return new ReturnT(500, "请输入“任务描述”"); } - if (StringUtils.isBlank(author)) { + if (StringUtils.isBlank(jobInfo.getAuthor())) { return new ReturnT(500, "请输入“负责人”"); } - if (StringUtils.isBlank(alarmEmail)) { + if (StringUtils.isBlank(jobInfo.getAlarmEmail())) { return new ReturnT(500, "请输入“报警邮件”"); } - if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) { + if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) { + return new ReturnT(500, "路由策略非法"); + } + if (jobInfo.getGlueSwitch()==0 && StringUtils.isBlank(jobInfo.getExecutorHandler())) { return new ReturnT(500, "请输入“JobHandler”"); } // childJobKey valid - if (StringUtils.isNotBlank(childJobKey)) { - String[] childJobKeys = childJobKey.split(","); + if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) { + String[] childJobKeys = jobInfo.getChildJobKey().split(","); for (String childJobKeyItem: childJobKeys) { String[] childJobKeyArr = childJobKeyItem.split("_"); if (childJobKeyArr.length!=2) { @@ -105,8 +107,9 @@ public class XxlJobServiceImpl implements IXxlJobService { // generate jobName String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date()); + jobInfo.setJobName(jobName); try { - if (XxlJobDynamicScheduler.checkExists(jobName, String.valueOf(jobGroup))) { + if (XxlJobDynamicScheduler.checkExists(jobName, String.valueOf(jobInfo.getJobGroup()))) { return new ReturnT(500, "系统繁忙,请稍后重试"); } } catch (SchedulerException e1) { @@ -115,7 +118,7 @@ public class XxlJobServiceImpl implements IXxlJobService { } // Backup to the database - XxlJobInfo jobInfo = new XxlJobInfo(); + /*XxlJobInfo jobInfo = new XxlJobInfo(); jobInfo.setJobGroup(jobGroup); jobInfo.setJobName(jobName); jobInfo.setJobCron(jobCron); @@ -127,11 +130,11 @@ public class XxlJobServiceImpl implements IXxlJobService { jobInfo.setGlueSwitch(glueSwitch); jobInfo.setGlueSource(glueSource); jobInfo.setGlueRemark(glueRemark); - jobInfo.setChildJobKey(childJobKey); + jobInfo.setChildJobKey(childJobKey);*/ try { // add job 2 quartz - boolean result = XxlJobDynamicScheduler.addJob(String.valueOf(jobGroup), jobName, jobCron); + boolean result = XxlJobDynamicScheduler.addJob(String.valueOf(jobInfo.getJobGroup()), jobName, jobInfo.getJobCron()); if (result) { xxlJobInfoDao.save(jobInfo); return ReturnT.SUCCESS; @@ -145,36 +148,31 @@ public class XxlJobServiceImpl implements IXxlJobService { } @Override - public ReturnT reschedule(int jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, - String executorHandler, String executorParam, int glueSwitch, String childJobKey) { + public ReturnT reschedule(XxlJobInfo jobInfo) { // valid - XxlJobGroup group = xxlJobGroupDao.load(jobGroup); - if (group == null) { - return new ReturnT(500, "请选择“执行器”"); - } - if (StringUtils.isBlank(jobName)) { - return new ReturnT(500, "请输入“任务名”"); - } - if (!CronExpression.isValidExpression(jobCron)) { + if (!CronExpression.isValidExpression(jobInfo.getJobCron())) { return new ReturnT(500, "请输入格式正确的“Cron”"); } - if (StringUtils.isBlank(jobDesc)) { + if (StringUtils.isBlank(jobInfo.getJobDesc())) { return new ReturnT(500, "请输入“任务描述”"); } - if (StringUtils.isBlank(author)) { + if (StringUtils.isBlank(jobInfo.getAuthor())) { return new ReturnT(500, "请输入“负责人”"); } - if (StringUtils.isBlank(alarmEmail)) { + if (StringUtils.isBlank(jobInfo.getAlarmEmail())) { return new ReturnT(500, "请输入“报警邮件”"); } - if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) { + if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) { + return new ReturnT(500, "路由策略非法"); + } + if (jobInfo.getGlueSwitch()==0 && StringUtils.isBlank(jobInfo.getExecutorHandler())) { return new ReturnT(500, "请输入“JobHandler”"); } // childJobKey valid - if (StringUtils.isNotBlank(childJobKey)) { - String[] childJobKeys = childJobKey.split(","); + if (StringUtils.isNotBlank(jobInfo.getChildJobKey())) { + String[] childJobKeys = jobInfo.getChildJobKey().split(","); for (String childJobKeyItem: childJobKeys) { String[] childJobKeyArr = childJobKeyItem.split("_"); if (childJobKeyArr.length!=2) { @@ -188,21 +186,26 @@ public class XxlJobServiceImpl implements IXxlJobService { } // stage job info - XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName); - jobInfo.setJobCron(jobCron); - jobInfo.setJobDesc(jobDesc); - jobInfo.setAuthor(author); - jobInfo.setAlarmEmail(alarmEmail); - jobInfo.setExecutorHandler(executorHandler); - jobInfo.setExecutorParam(executorParam); - jobInfo.setGlueSwitch(glueSwitch); - jobInfo.setChildJobKey(childJobKey); + XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(jobInfo.getId()); + if (exists_jobInfo == null) { + return new ReturnT(500, "参数异常"); + } + + exists_jobInfo.setJobCron(jobInfo.getJobCron()); + exists_jobInfo.setJobDesc(jobInfo.getJobDesc()); + exists_jobInfo.setAuthor(jobInfo.getAuthor()); + exists_jobInfo.setAlarmEmail(jobInfo.getAlarmEmail()); + exists_jobInfo.setExecutorRouteStrategy(jobInfo.getExecutorRouteStrategy()); + exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler()); + exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam()); + exists_jobInfo.setGlueSwitch(jobInfo.getGlueSwitch()); + exists_jobInfo.setChildJobKey(jobInfo.getChildJobKey()); try { // fresh quartz - boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(jobGroup), jobName, jobCron); + boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), exists_jobInfo.getJobName(), exists_jobInfo.getJobCron()); if (ret) { - xxlJobInfoDao.update(jobInfo); + xxlJobInfoDao.update(exists_jobInfo); return ReturnT.SUCCESS; } else { return new ReturnT(500, "更新任务失败"); @@ -215,11 +218,13 @@ public class XxlJobServiceImpl implements IXxlJobService { @Override public ReturnT remove(int jobGroup, String jobName) { + XxlJobInfo xxlJobInfo = xxlJobInfoDao.load(jobGroup, jobName); + try { XxlJobDynamicScheduler.removeJob(jobName, String.valueOf(jobGroup)); xxlJobInfoDao.delete(jobGroup, jobName); xxlJobLogDao.delete(jobGroup, jobName); - xxlJobLogGlueDao.delete(jobGroup, jobName); + xxlJobLogGlueDao.deleteByJobId(xxlJobInfo.getId()); 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 e8533338327f1cebaf2a46c7145c146b8ab9820a..cc5b1aa4b26660a1ba1d6431faea8e6d4c7203ce 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml @@ -113,7 +113,13 @@ SELECT LAST_INSERT_ID() - + + + + @@ -63,16 +52,16 @@ WHERE id NOT in( SELECT id FROM( SELECT id FROM XXL_JOB_QRTZ_TRIGGER_LOGGLUE - WHERE `job_group` = #{jobGroup} and `job_name` = #{jobName} + WHERE `job_id` = #{jobId} ORDER BY update_time desc LIMIT 0, #{limit} ) t1 - ) AND `job_group` = #{jobGroup} and `job_name` = #{jobName} + ) AND `job_id` = #{jobId} - + DELETE FROM XXL_JOB_QRTZ_TRIGGER_LOGGLUE - WHERE job_group = #{jobGroup} and job_name = #{jobName} + WHERE `job_id` = #{jobId} \ No newline at end of file diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/jobcode/jobcode.index.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/jobcode/jobcode.index.ftl index 63c93fec137a5521b42ef2a0b8876350573e1be3..bf1d3825d09e83886cbb657c584fb375211aced8 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/jobcode/jobcode.index.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/jobcode/jobcode.index.ftl @@ -94,8 +94,7 @@ 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 85467826f878390809d0c7ef580c0ac192c77598..c0e167115f883fb7c6fffd772f67aff62739a1a0 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 @@ -124,23 +124,29 @@
-
+
+ +
+ +
+ +
+
+
- - GLUE  + + GLUE 
-
- +
+
-
-
- -
- -
@@ -148,6 +154,10 @@
+
+ +
+

@@ -191,14 +201,30 @@ public class DemoGlueJobHandler extends IJobHandler {
+
+ +
+ +
+ +
+
@@ -212,24 +238,21 @@ public class DemoGlueJobHandler extends IJobHandler {
- -
+ +
+ +
+
+
-
- -
- -
-

- - +
diff --git a/xxl-job-admin/src/main/webapp/static/js/jobcode.index.1.js b/xxl-job-admin/src/main/webapp/static/js/jobcode.index.1.js index 43b2d3a268cece8b3d5e29ee1689aa023d6d26e8..5863f28ed49e176c552be84aee2d28e0712a847f 100644 --- a/xxl-job-admin/src/main/webapp/static/js/jobcode.index.1.js +++ b/xxl-job-admin/src/main/webapp/static/js/jobcode.index.1.js @@ -37,8 +37,7 @@ $(function() { type : 'POST', url : base_url + '/jobcode/save', data : { - 'jobGroup' : jobGroup, - 'jobName' : jobName, + 'id' : id, 'glueSource' : glueSource, 'glueRemark' : glueRemark }, 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 cd440fc58345c41ad7d12485c6cd57b6363d13a8..ed01fa698d4db27a6f8c785a869a49dbab8e22e9 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 @@ -100,7 +100,7 @@ $(function() { // log url var codeBtn = ""; if(row.glueSwitch > 0){ - var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName; + var codeUrl = base_url +'/jobcode?jobId='+ row.id; codeBtn = ' ' } @@ -112,6 +112,7 @@ $(function() { ' jobDesc="'+ row.jobDesc +'" '+ ' author="'+ row.author +'" '+ ' alarmEmail="'+ row.alarmEmail +'" '+ + ' executorRouteStrategy="'+row.executorRouteStrategy +'" '+ ' executorHandler="'+row.executorHandler +'" '+ ' executorParam="'+ row.executorParam +'" '+ ' glueSwitch="'+ row.glueSwitch +'" '+ @@ -323,20 +324,17 @@ $(function() { $("#job_list").on('click', '.update',function() { // base data - $("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup")); - $("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName")); + $("#updateModal .form input[name='id']").val($(this).parent('p').attr("id")); + $('#updateModal .form select[name=jobGroup] option[value='+ $(this).parent('p').attr("jobGroup") +']').prop('selected', true); $("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc")); $("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron")); $("#updateModal .form input[name='author']").val($(this).parent('p').attr("author")); $("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail")); + $('#updateModal .form select[name=executorRouteStrategy] option[value='+ $(this).parent('p').attr("executorRouteStrategy") +']').prop('selected', true); $("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler")); $("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam")); $("#updateModal .form input[name='childJobKey']").val($(this).parent('p').attr("childJobKey")); - // jobGroupTitle - var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text(); - $("#updateModal .form .jobGroupTitle").val(jobGroupTitle); - // glueSwitch var glueSwitch = $(this).parent('p').attr("glueSwitch"); $("#updateModal .form input[name='glueSwitch']").val(glueSwitch);