diff --git a/db/tables_xxl_job.sql b/db/tables_xxl_job.sql index 8a3840f1..30076993 100644 --- a/db/tables_xxl_job.sql +++ b/db/tables_xxl_job.sql @@ -204,11 +204,12 @@ CREATE TABLE XXL_JOB_QRTZ_TRIGGER_REGISTRY ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE XXL_JOB_QRTZ_TRIGGER_GROUP ( - `group_name` varchar(255) NOT NULL, - `group_desc` varchar(255) NOT NULL, - `order` int(11) NOT NULL, - PRIMARY KEY (`group_name`) + `app_name` varchar(64) NOT NULL, + `title` varchar(12) NOT NULL, + `order` tinyint(4) NOT NULL, + PRIMARY KEY (`app_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP VALUES ('xxl-job-executor-example', '示例项目', '1'); commit; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java index ee3d4300..d9f79a85 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java @@ -2,8 +2,11 @@ package com.xxl.job.admin.controller; import com.xxl.job.admin.core.model.ReturnT; import com.xxl.job.admin.core.model.XxlJobGroup; +import com.xxl.job.admin.core.thread.JobRegistryHelper; import com.xxl.job.admin.dao.IXxlJobGroupDao; import com.xxl.job.admin.dao.IXxlJobInfoDao; +import com.xxl.job.core.registry.RegistHelper; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -30,6 +33,14 @@ public class JobGroupController { @RequestMapping public String index(Model model) { List list = xxlJobGroupDao.findAll(); + + if (CollectionUtils.isNotEmpty(list)) { + for (XxlJobGroup group: list) { + List registryList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), group.getAppName()); + group.setRegistryList(registryList); + } + } + model.addAttribute("list", list); return "jobgroup/jobgroup.index"; } @@ -39,17 +50,20 @@ public class JobGroupController { public ReturnT save(XxlJobGroup xxlJobGroup){ // valid - if (xxlJobGroup.getGroupName()==null || StringUtils.isBlank(xxlJobGroup.getGroupName())) { - return new ReturnT(500, "请输入分组"); + if (xxlJobGroup.getAppName()==null || StringUtils.isBlank(xxlJobGroup.getAppName())) { + return new ReturnT(500, "请输入AppName"); } - if (xxlJobGroup.getGroupDesc()==null || StringUtils.isBlank(xxlJobGroup.getGroupDesc())) { - return new ReturnT(500, "请输入描述"); + if (xxlJobGroup.getAppName().length()>64) { + return new ReturnT(500, "AppName长度限制为4~64"); + } + if (xxlJobGroup.getTitle()==null || StringUtils.isBlank(xxlJobGroup.getTitle())) { + return new ReturnT(500, "请输入名称"); } // check repeat - XxlJobGroup group = xxlJobGroupDao.load(xxlJobGroup.getGroupName()); + XxlJobGroup group = xxlJobGroupDao.load(xxlJobGroup.getAppName()); if (group!=null) { - return new ReturnT(500, "分组已存在, 请勿重复添加"); + return new ReturnT(500, "AppName对应的执行器已存在, 请勿重复添加"); } int ret = xxlJobGroupDao.save(xxlJobGroup); @@ -59,21 +73,37 @@ public class JobGroupController { @RequestMapping("/update") @ResponseBody public ReturnT update(XxlJobGroup xxlJobGroup){ + // valid + if (xxlJobGroup.getAppName()==null || StringUtils.isBlank(xxlJobGroup.getAppName())) { + return new ReturnT(500, "请输入AppName"); + } + if (xxlJobGroup.getAppName().length()>64) { + return new ReturnT(500, "AppName长度限制为4~64"); + } + if (xxlJobGroup.getTitle()==null || StringUtils.isBlank(xxlJobGroup.getTitle())) { + return new ReturnT(500, "请输入名称"); + } + int ret = xxlJobGroupDao.update(xxlJobGroup); return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL; } @RequestMapping("/remove") @ResponseBody - public ReturnT remove(String groupName){ + public ReturnT remove(String appName){ // valid - int count = xxlJobInfoDao.pageListCount(0, 10, groupName, null); + int count = xxlJobInfoDao.pageListCount(0, 10, appName, null); if (count > 0) { return new ReturnT(500, "该分组使用中, 不可删除"); } - int ret = xxlJobGroupDao.remove(groupName); + List allList = xxlJobGroupDao.findAll(); + if (allList.size() == 1) { + return new ReturnT(500, "删除失败, 系统需要至少预留一个默认分组"); + } + + int ret = xxlJobGroupDao.remove(appName); return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java index 7c41f809..d32e72b0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java @@ -1,28 +1,33 @@ package com.xxl.job.admin.core.model; +import java.util.List; + /** * Created by xuxueli on 16/9/30. */ public class XxlJobGroup { - private String groupName; - private String groupDesc; + private String appName; + private String title; private int order; - public String getGroupName() { - return groupName; + // registry list + private List registryList; + + public String getAppName() { + return appName; } - public void setGroupName(String groupName) { - this.groupName = groupName; + public void setAppName(String appName) { + this.appName = appName; } - public String getGroupDesc() { - return groupDesc; + public String getTitle() { + return title; } - public void setGroupDesc(String groupDesc) { - this.groupDesc = groupDesc; + public void setTitle(String title) { + this.title = title; } public int getOrder() { @@ -32,4 +37,12 @@ public class XxlJobGroup { public void setOrder(int order) { this.order = order; } + + public List getRegistryList() { + return registryList; + } + + public void setRegistryList(List registryList) { + this.registryList = registryList; + } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java index da74f9da..88d87117 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java @@ -42,12 +42,12 @@ public class JobRegistryHelper { if (list != null) { for (XxlJobRegistry item: list) { String groupKey = makeGroupKey(item.getRegistryGroup(), item.getRegistryKey()); - List dataSet = temp.get(groupKey); - if (dataSet == null) { - dataSet = new ArrayList(); + List registryList = temp.get(groupKey); + if (registryList == null) { + registryList = new ArrayList(); } - dataSet.add(item.getRegistryValue()); - temp.put(groupKey, dataSet); + registryList.add(item.getRegistryValue()); + temp.put(groupKey, registryList); } } registMap = temp; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java index f94ef9d2..bbd414e8 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java @@ -15,7 +15,7 @@ public interface IXxlJobGroupDao { public int update(XxlJobGroup xxlJobGroup); - public int remove(String groupName); + public int remove(String appName); - public XxlJobGroup load(String groupName); + public XxlJobGroup load(String appName); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java index 1c69d63b..778f878a 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java @@ -33,13 +33,13 @@ public class XxlJobGroupDaoImpl implements IXxlJobGroupDao { } @Override - public int remove(String groupName) { - return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", groupName); + public int remove(String appName) { + return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", appName); } @Override - public XxlJobGroup load(String groupName) { - return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", groupName); + public XxlJobGroup load(String appName) { + return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", appName); } diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml index 305888cd..7d9f9ea2 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml @@ -4,14 +4,14 @@ - - + + - t.group_name, - t.group_desc, + t.app_name, + t.title, t.order @@ -22,26 +22,26 @@ - INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `group_name`, `group_desc`, `order`) - values ( #{groupName}, #{groupDesc}, #{order}); + INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `app_name`, `title`, `order`) + values ( #{appName}, #{title}, #{order}); UPDATE XXL_JOB_QRTZ_TRIGGER_GROUP - SET `group_desc` = #{groupDesc}, + SET `title` = #{title}, `order` = #{order} - WHERE group_name = #{groupName} + WHERE app_name = #{appName} DELETE FROM XXL_JOB_QRTZ_TRIGGER_GROUP - WHERE group_name = #{groupName} + WHERE app_name = #{appName} \ No newline at end of file diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl index bb1d11b2..48439e33 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl @@ -85,8 +85,8 @@
  • 常用模块
  • - - + + diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/help.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/help.ftl index 094e69d9..b5af2d0e 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/help.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/help.ftl @@ -16,7 +16,7 @@
    -

    任务调度中心使用教程

    +

    使用教程任务调度中心

    -

    分组管理任务调度中心

    +

    执行器管理任务调度中心

    @@ -30,16 +30,17 @@
    -

    分组管理

    - +

    执行器列表

       +
    - - + + + @@ -47,12 +48,13 @@ <#if list?exists && list?size gt 0> <#list list as group> - - + + + @@ -71,17 +73,17 @@
    名称AppNameAppName名称 排序OnLine 操作
    ${group.groupDesc}${group.groupName}${group.appName}${group.title} ${group.order}<#if group.registryList?exists><#list group.registryList as item>${item}
    - - + +