소스 검색

任务分组管理,修改为执行器管理

xueli.xue 8 년 전
부모
커밋
087cd1d435

+ 5 - 4
db/tables_xxl_job.sql 파일 보기

@@ -204,11 +204,12 @@ CREATE TABLE XXL_JOB_QRTZ_TRIGGER_REGISTRY (
204 204
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
205 205
 
206 206
 CREATE TABLE XXL_JOB_QRTZ_TRIGGER_GROUP (
207
-  `group_name` varchar(255) NOT NULL,
208
-  `group_desc` varchar(255) NOT NULL,
209
-  `order` int(11) NOT NULL,
210
-  PRIMARY KEY (`group_name`)
207
+  `app_name` varchar(64) NOT NULL,
208
+  `title` varchar(12) NOT NULL,
209
+  `order` tinyint(4) NOT NULL,
210
+  PRIMARY KEY (`app_name`)
211 211
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
212
+INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP VALUES ('xxl-job-executor-example', '示例项目', '1');
212 213
 
213 214
 commit;
214 215
 

+ 39 - 9
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java 파일 보기

@@ -2,8 +2,11 @@ package com.xxl.job.admin.controller;
2 2
 
3 3
 import com.xxl.job.admin.core.model.ReturnT;
4 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
5
+import com.xxl.job.admin.core.thread.JobRegistryHelper;
5 6
 import com.xxl.job.admin.dao.IXxlJobGroupDao;
6 7
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
8
+import com.xxl.job.core.registry.RegistHelper;
9
+import org.apache.commons.collections.CollectionUtils;
7 10
 import org.apache.commons.lang.StringUtils;
8 11
 import org.springframework.stereotype.Controller;
9 12
 import org.springframework.ui.Model;
@@ -30,6 +33,14 @@ public class JobGroupController {
30 33
 	@RequestMapping
31 34
 	public String index(Model model) {
32 35
 		List<XxlJobGroup> list = xxlJobGroupDao.findAll();
36
+
37
+		if (CollectionUtils.isNotEmpty(list)) {
38
+			for (XxlJobGroup group: list) {
39
+				List<String> registryList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), group.getAppName());
40
+				group.setRegistryList(registryList);
41
+			}
42
+		}
43
+
33 44
 		model.addAttribute("list", list);
34 45
 		return "jobgroup/jobgroup.index";
35 46
 	}
@@ -39,17 +50,20 @@ public class JobGroupController {
39 50
 	public ReturnT<String> save(XxlJobGroup xxlJobGroup){
40 51
 
41 52
 		// valid
42
-		if (xxlJobGroup.getGroupName()==null || StringUtils.isBlank(xxlJobGroup.getGroupName())) {
43
-			return new ReturnT<String>(500, "请输入分组");
53
+		if (xxlJobGroup.getAppName()==null || StringUtils.isBlank(xxlJobGroup.getAppName())) {
54
+			return new ReturnT<String>(500, "请输入AppName");
44 55
 		}
45
-		if (xxlJobGroup.getGroupDesc()==null || StringUtils.isBlank(xxlJobGroup.getGroupDesc())) {
46
-			return new ReturnT<String>(500, "请输入描述");
56
+		if (xxlJobGroup.getAppName().length()>64) {
57
+			return new ReturnT<String>(500, "AppName长度限制为4~64");
58
+		}
59
+		if (xxlJobGroup.getTitle()==null || StringUtils.isBlank(xxlJobGroup.getTitle())) {
60
+			return new ReturnT<String>(500, "请输入名称");
47 61
 		}
48 62
 
49 63
 		// check repeat
50
-		XxlJobGroup group = xxlJobGroupDao.load(xxlJobGroup.getGroupName());
64
+		XxlJobGroup group = xxlJobGroupDao.load(xxlJobGroup.getAppName());
51 65
 		if (group!=null) {
52
-			return new ReturnT<String>(500, "分组已存在, 请勿重复添加");
66
+			return new ReturnT<String>(500, "AppName对应的执行器已存在, 请勿重复添加");
53 67
 		}
54 68
 
55 69
 		int ret = xxlJobGroupDao.save(xxlJobGroup);
@@ -59,21 +73,37 @@ public class JobGroupController {
59 73
 	@RequestMapping("/update")
60 74
 	@ResponseBody
61 75
 	public ReturnT<String> update(XxlJobGroup xxlJobGroup){
76
+		// valid
77
+		if (xxlJobGroup.getAppName()==null || StringUtils.isBlank(xxlJobGroup.getAppName())) {
78
+			return new ReturnT<String>(500, "请输入AppName");
79
+		}
80
+		if (xxlJobGroup.getAppName().length()>64) {
81
+			return new ReturnT<String>(500, "AppName长度限制为4~64");
82
+		}
83
+		if (xxlJobGroup.getTitle()==null || StringUtils.isBlank(xxlJobGroup.getTitle())) {
84
+			return new ReturnT<String>(500, "请输入名称");
85
+		}
86
+
62 87
 		int ret = xxlJobGroupDao.update(xxlJobGroup);
63 88
 		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
64 89
 	}
65 90
 
66 91
 	@RequestMapping("/remove")
67 92
 	@ResponseBody
68
-	public ReturnT<String> remove(String groupName){
93
+	public ReturnT<String> remove(String appName){
69 94
 
70 95
 		// valid
71
-		int count = xxlJobInfoDao.pageListCount(0, 10, groupName, null);
96
+		int count = xxlJobInfoDao.pageListCount(0, 10, appName, null);
72 97
 		if (count > 0) {
73 98
 			return new ReturnT<String>(500, "该分组使用中, 不可删除");
74 99
 		}
75 100
 
76
-		int ret = xxlJobGroupDao.remove(groupName);
101
+		List<XxlJobGroup> allList = xxlJobGroupDao.findAll();
102
+		if (allList.size() == 1) {
103
+			return new ReturnT<String>(500, "删除失败, 系统需要至少预留一个默认分组");
104
+		}
105
+
106
+		int ret = xxlJobGroupDao.remove(appName);
77 107
 		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
78 108
 	}
79 109
 

+ 23 - 10
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java 파일 보기

@@ -1,28 +1,33 @@
1 1
 package com.xxl.job.admin.core.model;
2 2
 
3
+import java.util.List;
4
+
3 5
 /**
4 6
  * Created by xuxueli on 16/9/30.
5 7
  */
6 8
 public class XxlJobGroup {
7 9
 
8
-    private String groupName;
9
-    private String groupDesc;
10
+    private String appName;
11
+    private String title;
10 12
     private int order;
11 13
 
12
-    public String getGroupName() {
13
-        return groupName;
14
+    // registry list
15
+    private List<String> registryList;
16
+
17
+    public String getAppName() {
18
+        return appName;
14 19
     }
15 20
 
16
-    public void setGroupName(String groupName) {
17
-        this.groupName = groupName;
21
+    public void setAppName(String appName) {
22
+        this.appName = appName;
18 23
     }
19 24
 
20
-    public String getGroupDesc() {
21
-        return groupDesc;
25
+    public String getTitle() {
26
+        return title;
22 27
     }
23 28
 
24
-    public void setGroupDesc(String groupDesc) {
25
-        this.groupDesc = groupDesc;
29
+    public void setTitle(String title) {
30
+        this.title = title;
26 31
     }
27 32
 
28 33
     public int getOrder() {
@@ -32,4 +37,12 @@ public class XxlJobGroup {
32 37
     public void setOrder(int order) {
33 38
         this.order = order;
34 39
     }
40
+
41
+    public List<String> getRegistryList() {
42
+        return registryList;
43
+    }
44
+
45
+    public void setRegistryList(List<String> registryList) {
46
+        this.registryList = registryList;
47
+    }
35 48
 }

+ 5 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java 파일 보기

@@ -42,12 +42,12 @@ public class JobRegistryHelper {
42 42
 						if (list != null) {
43 43
 							for (XxlJobRegistry item: list) {
44 44
 								String groupKey = makeGroupKey(item.getRegistryGroup(), item.getRegistryKey());
45
-								List<String> dataSet = temp.get(groupKey);
46
-								if (dataSet == null) {
47
-									dataSet = new ArrayList<String>();
45
+								List<String> registryList = temp.get(groupKey);
46
+								if (registryList == null) {
47
+									registryList = new ArrayList<String>();
48 48
 								}
49
-								dataSet.add(item.getRegistryValue());
50
-								temp.put(groupKey, dataSet);
49
+								registryList.add(item.getRegistryValue());
50
+								temp.put(groupKey, registryList);
51 51
 							}
52 52
 						}
53 53
 						registMap = temp;

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java 파일 보기

@@ -15,7 +15,7 @@ public interface IXxlJobGroupDao {
15 15
 
16 16
     public int update(XxlJobGroup xxlJobGroup);
17 17
 
18
-    public int remove(String groupName);
18
+    public int remove(String appName);
19 19
 
20
-    public XxlJobGroup load(String groupName);
20
+    public XxlJobGroup load(String appName);
21 21
 }

+ 4 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java 파일 보기

@@ -33,13 +33,13 @@ public class XxlJobGroupDaoImpl implements IXxlJobGroupDao {
33 33
     }
34 34
 
35 35
     @Override
36
-    public int remove(String groupName) {
37
-        return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", groupName);
36
+    public int remove(String appName) {
37
+        return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", appName);
38 38
     }
39 39
 
40 40
     @Override
41
-    public XxlJobGroup load(String groupName) {
42
-        return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", groupName);
41
+    public XxlJobGroup load(String appName) {
42
+        return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", appName);
43 43
     }
44 44
 
45 45
 

+ 10 - 10
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml 파일 보기

@@ -4,14 +4,14 @@
4 4
 <mapper namespace="XxlJobGroupMapper">
5 5
 	
6 6
 	<resultMap id="XxlJobGroup" type="com.xxl.job.admin.core.model.XxlJobGroup" >
7
-	    <result column="group_name" property="groupName" />
8
-	    <result column="group_desc" property="groupDesc" />
7
+	    <result column="app_name" property="appName" />
8
+	    <result column="title" property="title" />
9 9
 	    <result column="order" property="order" />
10 10
 	</resultMap>
11 11
 
12 12
 	<sql id="Base_Column_List">
13
-		t.group_name,
14
-		t.group_desc,
13
+		t.app_name,
14
+		t.title,
15 15
 		t.order
16 16
 	</sql>
17 17
 
@@ -22,26 +22,26 @@
22 22
 	</select>
23 23
 
24 24
 	<insert id="save" parameterType="java.util.Map" >
25
-		INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `group_name`, `group_desc`, `order`)
26
-		values ( #{groupName}, #{groupDesc}, #{order});
25
+		INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `app_name`, `title`, `order`)
26
+		values ( #{appName}, #{title}, #{order});
27 27
 	</insert>
28 28
 
29 29
 	<update id="update" parameterType="java.util.Map" >
30 30
 		UPDATE XXL_JOB_QRTZ_TRIGGER_GROUP
31
-		SET `group_desc` = #{groupDesc},
31
+		SET `title` = #{title},
32 32
 			`order` = #{order}
33
-		WHERE group_name = #{groupName}
33
+		WHERE app_name = #{appName}
34 34
 	</update>
35 35
 
36 36
 	<delete id="remove" parameterType="java.lang.String" >
37 37
 		DELETE FROM XXL_JOB_QRTZ_TRIGGER_GROUP
38
-		WHERE group_name = #{groupName}
38
+		WHERE app_name = #{appName}
39 39
 	</delete>
40 40
 
41 41
 	<select id="load" parameterType="java.lang.String" resultMap="XxlJobGroup">
42 42
 		SELECT <include refid="Base_Column_List" />
43 43
 		FROM XXL_JOB_QRTZ_TRIGGER_GROUP AS t
44
-		WHERE t.group_name = #{groupName}
44
+		WHERE t.app_name = #{appName}
45 45
 	</select>
46 46
 
47 47
 </mapper>

+ 2 - 2
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl 파일 보기

@@ -85,8 +85,8 @@
85 85
 				<li class="header">常用模块</li>
86 86
 				<li class="nav-click" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
87 87
 				<li class="nav-click" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
88
-                <li class="nav-click" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-red"></i> <span>分组管理</span></a></li>
89
-				<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-yellow"></i><span>使用教程</span></a></li>
88
+                <li class="nav-click" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-aqua"></i> <span>执行器管理</span></a></li>
89
+				<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-red"></i><span>使用教程</span></a></li>
90 90
 			</ul>
91 91
 		</section>
92 92
 		<!-- /.sidebar -->

+ 1 - 1
xxl-job-admin/src/main/webapp/WEB-INF/template/help.ftl 파일 보기

@@ -16,7 +16,7 @@
16 16
 	<div class="content-wrapper">
17 17
 		<!-- Content Header (Page header) -->
18 18
 		<section class="content-header">
19
-			<h1>任务调度中心<small>使用教程</small></h1>
19
+			<h1>使用教程<small>任务调度中心</small></h1>
20 20
 			<!--
21 21
 			<ol class="breadcrumb">
22 22
 				<li><a><i class="fa fa-dashboard"></i>调度中心</a></li>

+ 21 - 19
xxl-job-admin/src/main/webapp/WEB-INF/template/jobgroup/jobgroup.index.ftl 파일 보기

@@ -20,7 +20,7 @@
20 20
 	<div class="content-wrapper">
21 21
 		<!-- Content Header (Page header) -->
22 22
 		<section class="content-header">
23
-			<h1>分组管理<small>任务调度中心</small></h1>
23
+			<h1>执行器管理<small>任务调度中心</small></h1>
24 24
 		</section>
25 25
 
26 26
 		<!-- Main content -->
@@ -30,16 +30,17 @@
30 30
 				<div class="col-xs-12">
31 31
 					<div class="box">
32 32
 			            <div class="box-header">
33
-							<h3 class="box-title">分组管理</h3>
34
-                            <button class="btn btn-success btn-xs pull-left2 add" >+新增分组</button>
33
+							<h3 class="box-title">执行器列表</h3>&nbsp;&nbsp;
34
+                            <button class="btn btn-info btn-xs pull-left2 add" >+新增执行器</button>
35 35
 						</div>
36 36
 			            <div class="box-body">
37 37
 			              	<table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
38 38
 				                <thead>
39 39
 					            	<tr>
40
-                                        <th name="groupDesc" >名称</th>
41
-                                        <th name="groupName" >AppName</th>
40
+                                        <th name="appName" >AppName</th>
41
+                                        <th name="title" >名称</th>
42 42
 					                  	<th name="order" >排序</th>
43
+                                        <th name="registryList" >OnLine</th>
43 44
                                         <th name="operate" >操作</th>
44 45
 					                </tr>
45 46
 				                </thead>
@@ -47,12 +48,13 @@
47 48
 								<#if list?exists && list?size gt 0>
48 49
 								<#list list as group>
49 50
 									<tr>
50
-                                        <td>${group.groupDesc}</td>
51
-                                        <td>${group.groupName}</td>
51
+                                        <td>${group.appName}</td>
52
+                                        <td>${group.title}</td>
52 53
                                         <td>${group.order}</td>
54
+                                        <td><#if group.registryList?exists><#list group.registryList as item><span class="badge bg-green">${item}</span><br></#list></#if></td>
53 55
 										<td>
54
-                                            <button class="btn btn-warning btn-xs update" groupName="${group.groupName}" groupDesc="${group.groupDesc}" order="${group.order}" >编辑</button>
55
-                                            <button class="btn btn-danger btn-xs remove" groupName="${group.groupName}" >删除</button>
56
+                                            <button class="btn btn-warning btn-xs update" appName="${group.appName}" title="${group.title}" order="${group.order}" >编辑</button>
57
+                                            <button class="btn btn-danger btn-xs remove" appName="${group.appName}" >删除</button>
56 58
 										</td>
57 59
 									</tr>
58 60
 								</#list>
@@ -71,17 +73,17 @@
71 73
         <div class="modal-dialog ">
72 74
             <div class="modal-content">
73 75
                 <div class="modal-header">
74
-                    <h4 class="modal-title" >新增分组</h4>
76
+                    <h4 class="modal-title" >新增执行器</h4>
75 77
                 </div>
76 78
                 <div class="modal-body">
77 79
                     <form class="form-horizontal form" role="form" >
78 80
                         <div class="form-group">
79
-                            <label for="lastname" class="col-sm-2 control-label">分组<font color="red">*</font></label>
80
-                            <div class="col-sm-10"><input type="text" class="form-control" name="groupName" placeholder="请输入“分组”" maxlength="200" ></div>
81
+                            <label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
82
+                            <div class="col-sm-10"><input type="text" class="form-control" name="appName" placeholder="请输入“AppName”" maxlength="64" ></div>
81 83
                         </div>
82 84
                         <div class="form-group">
83
-                            <label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
84
-                            <div class="col-sm-10"><input type="text" class="form-control" name="groupDesc" placeholder="请输入“描述”" maxlength="200" ></div>
85
+                            <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
86
+                            <div class="col-sm-10"><input type="text" class="form-control" name="title" placeholder="请输入“名称”" maxlength="12" ></div>
85 87
                         </div>
86 88
                         <div class="form-group">
87 89
                             <label for="lastname" class="col-sm-2 control-label">排序<font color="red">*</font></label>
@@ -105,17 +107,17 @@
105 107
         <div class="modal-dialog ">
106 108
             <div class="modal-content">
107 109
                 <div class="modal-header">
108
-                    <h4 class="modal-title" >编辑分组</h4>
110
+                    <h4 class="modal-title" >编辑执行器</h4>
109 111
                 </div>
110 112
                 <div class="modal-body">
111 113
                     <form class="form-horizontal form" role="form" >
112 114
                         <div class="form-group">
113
-                            <label for="lastname" class="col-sm-2 control-label">分组<font color="red">*</font></label>
114
-                            <div class="col-sm-10"><input type="text" class="form-control" name="groupName" placeholder="请输入“分组”" maxlength="200" readonly ></div>
115
+                            <label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
116
+                            <div class="col-sm-10"><input type="text" class="form-control" name="appName" placeholder="请输入“AppName”" maxlength="64" readonly ></div>
115 117
                         </div>
116 118
                         <div class="form-group">
117
-                            <label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
118
-                            <div class="col-sm-10"><input type="text" class="form-control" name="groupDesc" placeholder="请输入“描述”" maxlength="200" ></div>
119
+                            <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
120
+                            <div class="col-sm-10"><input type="text" class="form-control" name="title" placeholder="请输入“名称”" maxlength="12" ></div>
119 121
                         </div>
120 122
                         <div class="form-group">
121 123
                             <label for="lastname" class="col-sm-2 control-label">排序<font color="red">*</font></label>

+ 1 - 1
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl 파일 보기

@@ -25,7 +25,7 @@
25 25
 	<div class="content-wrapper">
26 26
 		<!-- Content Header (Page header) -->
27 27
 		<section class="content-header">
28
-			<h1>调度管理任务调度中心<small></small></h1>
28
+			<h1>调度管理<small>任务调度中心</small></h1>
29 29
 			<!--
30 30
 			<ol class="breadcrumb">
31 31
 				<li><a><i class="fa fa-dashboard"></i>调度管理</a></li>

+ 25 - 21
xxl-job-admin/src/main/webapp/static/js/jobgroup.index.1.js 파일 보기

@@ -2,20 +2,24 @@ $(function() {
2 2
 
3 3
 	// remove
4 4
 	$('.remove').on('click', function(){
5
-		var groupName = $(this).attr('groupName');
5
+		var appName = $(this).attr('appName');
6 6
 
7 7
 		ComConfirm.show("确认删除分组?", function(){
8 8
 			$.ajax({
9 9
 				type : 'POST',
10 10
 				url : base_url + '/jobgroup/remove',
11
-				data : {"groupName":groupName},
11
+				data : {"appName":appName},
12 12
 				dataType : "json",
13 13
 				success : function(data){
14 14
 					if (data.code == 200) {
15 15
 						ComAlert.show(1, '删除成功');
16 16
 						window.location.reload();
17 17
 					} else {
18
-						ComAlert.show(2, '删除失败');
18
+						if (data.msg) {
19
+							ComAlert.show(2, data.msg);
20
+						} else {
21
+							ComAlert.show(2, '删除失败');
22
+						}
19 23
 					}
20 24
 				},
21 25
 			});
@@ -37,12 +41,12 @@ $(function() {
37 41
 		errorClass : 'help-block',
38 42
 		focusInvalid : true,
39 43
 		rules : {
40
-			groupName : {
44
+			appName : {
41 45
 				required : true,
42
-				rangelength:[4,200],
46
+				rangelength:[4,64],
43 47
 				myValid01 : true
44 48
 			},
45
-			groupDesc : {
49
+			title : {
46 50
 				required : true,
47 51
 				rangelength:[4, 12]
48 52
 			},
@@ -53,13 +57,13 @@ $(function() {
53 57
 			}
54 58
 		},
55 59
 		messages : {
56
-			groupName : {
57
-				required :"请输入“分组”",
58
-				rangelength:"长度限制为4~200",
60
+			appName : {
61
+				required :"请输入“AppName”",
62
+				rangelength:"AppName长度限制为4~64",
59 63
 				myValid01: "限制以小写字母开头,由小写字母、数字和中划线组成"
60 64
 			},
61
-			groupDesc : {
62
-				required :"请输入“描述”",
65
+			title : {
66
+				required :"请输入“执行器名称”",
63 67
 				rangelength:"长度限制为4~12"
64 68
 			},
65 69
 			order : {
@@ -104,8 +108,8 @@ $(function() {
104 108
 	});
105 109
 
106 110
 	$('.update').on('click', function(){
107
-		$("#updateModal .form input[name='groupName']").val($(this).attr("groupName"));
108
-		$("#updateModal .form input[name='groupDesc']").val($(this).attr("groupDesc"));
111
+		$("#updateModal .form input[name='appName']").val($(this).attr("appName"));
112
+		$("#updateModal .form input[name='title']").val($(this).attr("title"));
109 113
 		$("#updateModal .form input[name='order']").val($(this).attr("order"));
110 114
 
111 115
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
@@ -115,12 +119,12 @@ $(function() {
115 119
 		errorClass : 'help-block',
116 120
 		focusInvalid : true,
117 121
 		rules : {
118
-			groupName : {
122
+			appName : {
119 123
 				required : true,
120
-				rangelength:[4,200],
124
+				rangelength:[4,64],
121 125
 				myValid01 : true
122 126
 			},
123
-			groupDesc : {
127
+			title : {
124 128
 				required : true,
125 129
 				rangelength:[4, 12]
126 130
 			},
@@ -131,13 +135,13 @@ $(function() {
131 135
 			}
132 136
 		},
133 137
 		messages : {
134
-			groupName : {
135
-				required :"请输入“分组”",
136
-				rangelength:"长度限制为4~200",
138
+			appName : {
139
+				required :"请输入“AppName”",
140
+				rangelength:"AppName长度限制为4~64",
137 141
 				myValid01: "限制以小写字母开头,由小写字母、数字和中划线组成"
138 142
 			},
139
-			groupDesc : {
140
-				required :"请输入“描述”",
143
+			title : {
144
+				required :"请输入“执行器名称”",
141 145
 				rangelength:"长度限制为4~12"
142 146
 			},
143 147
 			order : {