Browse Source

任务编辑界面交互调整

xueli.xue 9 years ago
parent
commit
23bd08bf36

+ 7 - 12
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl View File

193
 					<div class="form-group">
193
 					<div class="form-group">
194
                         <label for="firstname" class="col-sm-2 control-label">分组<font color="red">*</font></label>
194
                         <label for="firstname" class="col-sm-2 control-label">分组<font color="red">*</font></label>
195
                         <div class="col-sm-4">
195
                         <div class="col-sm-4">
196
-                            <select class="form-control" name="jobGroupTitle"  disabled>
197
-							<#list JobGroupList as group>
198
-                                <option value="${group}" >${group.desc}</option>
199
-							</#list>
200
-                            </select>
196
+							<input type="text" class="form-control" name="jobGroupTitle" maxlength="50" readonly >
201
                             <input type="hidden" name="jobGroup" >
197
                             <input type="hidden" name="jobGroup" >
202
                             <input type="hidden" name="jobName" >
198
                             <input type="hidden" name="jobName" >
203
-                        </div>
199
+						</div>
204
                         <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
200
                         <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
205
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
201
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
206
 					</div>
202
 					</div>
226
                     <div class="form-group">
222
                     <div class="form-group">
227
                         <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
223
                         <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
228
                         <div class="col-sm-4">
224
                         <div class="col-sm-4">
229
-                            <select class="form-control" name="glueSwitch" disabled >
230
-                                <option value="0" >BEAN模式</option>
231
-                                <option value="1" >GLUE模式</option>
232
-                            </select>
233
-                        </div>
225
+							<input type="text" class="form-control" name="glueSwitchTitle"  readonly >
226
+						</div>
234
                         <label for="lastname" class="col-sm-2 control-label">JobKey</label>
227
                         <label for="lastname" class="col-sm-2 control-label">JobKey</label>
235
-                        <div class="col-sm-4"><input type="text" class="form-control" name="jobKey" placeholder="请输入“jobHandler”" readonly ></div>
228
+                        <div class="col-sm-4">
229
+							<input type="text" class="form-control" name="jobKey" placeholder="请输入“jobHandler”" readonly >
230
+						</div>
236
                     </div>
231
                     </div>
237
 					<div class="form-group">
232
 					<div class="form-group">
238
 						<div class="col-sm-offset-3 col-sm-6">
233
 						<div class="col-sm-offset-3 col-sm-6">

+ 15 - 17
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js View File

91
 	                				var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
91
 	                				var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
92
 	                				codeBtn = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '
92
 	                				codeBtn = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '
93
 	                			}
93
 	                			}
94
-	                			
94
+
95
 	                			var html = '<p id="'+ row.id +'" '+
95
 	                			var html = '<p id="'+ row.id +'" '+
96
 	                							' jobGroup="'+ row.jobGroup +'" '+
96
 	                							' jobGroup="'+ row.jobGroup +'" '+
97
 	                							' jobName="'+ row.jobName +'" '+
97
 	                							' jobName="'+ row.jobName +'" '+
303
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
303
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
304
 
304
 
305
 		// job group selected
305
 		// job group selected
306
-		$("#updateModal .form select[name='jobGroupTitle']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").attr("selected",true);
307
-
308
-		// job group selected
309
-		$("#updateModal .form select[name='glueSwitch']").find("option[value='" + $(this).parent('p').attr("glueSwitch") + "']").attr("selected",true);
306
+		var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
307
+		$("#updateModal .form input[name='jobGroupTitle']").val(jobGroupTitle);
310
 
308
 
311
-		// generate job key
312
-		$("#updateModal .form input[name='jobKey']").val( $(this).parent('p').attr("jobGroup") + "_" + $(this).parent('p').attr("jobName") );
313
-
314
-		// GLUE check
315
-		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
316
-		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
317
-		if ($glueSwitch.val() != 0) {
318
-			$executorHandler.attr("readonly","readonly");
319
-			$("#updateModal .form .ifGLUE").attr("checked", true);
309
+		// glueSwitch and jobKey
310
+		var glueSwitchTitle;
311
+		var jobKey;
312
+		if ($(this).parent('p').attr("glueSwitch") == 0) {
313
+			glueSwitchTitle = "BEAN模式";
314
+			jobKey = $(this).parent('p').attr("jobGroup") + "_" + $(this).parent('p').attr("jobName");
320
 		} else {
315
 		} else {
321
-			$executorHandler.removeAttr("readonly");
322
-			$("#updateModal .form .ifGLUE").attr("checked", false);
316
+			glueSwitchTitle = "GLUE模式";
317
+			jobKey = "无";
323
 		}
318
 		}
324
-		
319
+		$("#updateModal .form input[name='glueSwitchTitle']").val(glueSwitchTitle);
320
+		$("#updateModal .form input[name='jobKey']").val(jobKey);
321
+
322
+		// show
325
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
323
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
326
 	});
324
 	});
327
 	var updateModalValidate = $("#updateModal .form").validate({
325
 	var updateModalValidate = $("#updateModal .form").validate({

+ 11 - 6
xxl-job-core/src/main/java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java View File

1
 package com.xxl.job.core.executor.jetty;
1
 package com.xxl.job.core.executor.jetty;
2
 
2
 
3
-import java.util.Map;
3
+import java.util.*;
4
 
4
 
5
 import org.eclipse.jetty.server.Connector;
5
 import org.eclipse.jetty.server.Connector;
6
 import org.eclipse.jetty.server.Handler;
6
 import org.eclipse.jetty.server.Handler;
88
 		Map<String, Object> serviceBeanMap = XxlJobExecutor.applicationContext.getBeansWithAnnotation(JobHander.class);
88
 		Map<String, Object> serviceBeanMap = XxlJobExecutor.applicationContext.getBeansWithAnnotation(JobHander.class);
89
         if (serviceBeanMap!=null && serviceBeanMap.size()>0) {
89
         if (serviceBeanMap!=null && serviceBeanMap.size()>0) {
90
             for (Object serviceBean : serviceBeanMap.values()) {
90
             for (Object serviceBean : serviceBeanMap.values()) {
91
-                String jobName = serviceBean.getClass().getAnnotation(JobHander.class).value();
92
-                if (jobName!=null && jobName.trim().length()>0 && serviceBean instanceof IJobHandler) {
93
-                	IJobHandler handler = (IJobHandler) serviceBean;
94
-                	HandlerRepository.regist(jobName, handler);
95
-				}
91
+                if (serviceBean instanceof IJobHandler){
92
+                    String jobKeys = serviceBean.getClass().getAnnotation(JobHander.class).value();
93
+                    if (jobKeys!=null && jobKeys.trim().length()>0) {
94
+                        Set<String> jobKeySet = new HashSet<String>(Arrays.asList(jobKeys.split(",")));
95
+                        for (String jobKey : jobKeySet) {
96
+                            IJobHandler handler = (IJobHandler) serviceBean;
97
+                            HandlerRepository.regist(jobKey, handler);
98
+                        }
99
+                    }
100
+                }
96
             }
101
             }
97
         }
102
         }
98
 	}
103
 	}

+ 24 - 24
xxl-job-core/src/main/java/com/xxl/job/core/handler/HandlerRepository.java View File

102
 				callback.setMsg("JOB_GROUP or JOB_NAME is null.");
102
 				callback.setMsg("JOB_GROUP or JOB_NAME is null.");
103
 				return JacksonUtil.writeValueAsString(callback);
103
 				return JacksonUtil.writeValueAsString(callback);
104
 			}
104
 			}
105
-			String jobKey = job_group.concat("_").concat(job_name);
106
 
105
 
107
 			// glue switch
106
 			// glue switch
108
 			String handler_glue_switch = _param.get(HandlerParamEnum.GLUE_SWITCH.name());
107
 			String handler_glue_switch = _param.get(HandlerParamEnum.GLUE_SWITCH.name());
111
 				return JacksonUtil.writeValueAsString(callback);
110
 				return JacksonUtil.writeValueAsString(callback);
112
 			}
111
 			}
113
 
112
 
114
-			HandlerThread handlerThread = handlerTreadMap.get(jobKey);;
113
+			String jobKey = job_group.concat("_").concat(job_name);
114
+			HandlerThread handlerThread = handlerTreadMap.get(jobKey);
115
 			if ("0".equals(handler_glue_switch)) {
115
 			if ("0".equals(handler_glue_switch)) {
116
 				// bean model
116
 				// bean model
117
 				if (handlerThread == null) {
117
 				if (handlerThread == null) {
129
 			// push data to queue
129
 			// push data to queue
130
 			handlerThread.pushData(_param);
130
 			handlerThread.pushData(_param);
131
 			callback.setStatus(RemoteCallBack.SUCCESS);
131
 			callback.setStatus(RemoteCallBack.SUCCESS);
132
-		} else if (namespace.equals(ActionEnum.LOG.name())) {
133
-			String log_id = _param.get(HandlerParamEnum.LOG_ID.name());
134
-			String log_date = _param.get(HandlerParamEnum.LOG_DATE.name());
135
-			if (log_id==null || log_date==null) {
136
-				callback.setMsg("LOG_ID | LOG_DATE can not be null.");
137
-				return JacksonUtil.writeValueAsString(callback);
138
-			}
139
-			int logId = -1;
140
-			Date triggerDate = null;
141
-			try {
142
-				logId = Integer.valueOf(log_id);
143
-				triggerDate = new Date(Long.valueOf(log_date));
144
-			} catch (Exception e) {
145
-			}
146
-			if (logId<=0 || triggerDate==null) {
147
-				callback.setMsg("LOG_ID | LOG_DATE parse error.");
148
-				return JacksonUtil.writeValueAsString(callback);
149
-			}
150
-			String logConteng = XxlJobFileAppender.readLog(triggerDate, log_id);
151
-			callback.setStatus(RemoteCallBack.SUCCESS);
152
-			callback.setMsg(logConteng);
153
 		} else if (namespace.equals(ActionEnum.KILL.name())) {
132
 		} else if (namespace.equals(ActionEnum.KILL.name())) {
154
 			// generate jobKey
133
 			// generate jobKey
155
 			String job_group = _param.get(HandlerParamEnum.JOB_GROUP.name());
134
 			String job_group = _param.get(HandlerParamEnum.JOB_GROUP.name());
171
 			} else {
150
 			} else {
172
 				callback.setMsg("handler for jobKey=[" + jobKey + "] not found.");
151
 				callback.setMsg("handler for jobKey=[" + jobKey + "] not found.");
173
 			}
152
 			}
174
-				
153
+
154
+		} else if (namespace.equals(ActionEnum.LOG.name())) {
155
+			String log_id = _param.get(HandlerParamEnum.LOG_ID.name());
156
+			String log_date = _param.get(HandlerParamEnum.LOG_DATE.name());
157
+			if (log_id==null || log_date==null) {
158
+				callback.setMsg("LOG_ID | LOG_DATE can not be null.");
159
+				return JacksonUtil.writeValueAsString(callback);
160
+			}
161
+			int logId = -1;
162
+			Date triggerDate = null;
163
+			try {
164
+				logId = Integer.valueOf(log_id);
165
+				triggerDate = new Date(Long.valueOf(log_date));
166
+			} catch (Exception e) {
167
+			}
168
+			if (logId<=0 || triggerDate==null) {
169
+				callback.setMsg("LOG_ID | LOG_DATE parse error.");
170
+				return JacksonUtil.writeValueAsString(callback);
171
+			}
172
+			String logConteng = XxlJobFileAppender.readLog(triggerDate, log_id);
173
+			callback.setStatus(RemoteCallBack.SUCCESS);
174
+			callback.setMsg(logConteng);
175
 		} else if (namespace.equals(ActionEnum.BEAT.name())) {
175
 		} else if (namespace.equals(ActionEnum.BEAT.name())) {
176
 			callback.setStatus(RemoteCallBack.SUCCESS);
176
 			callback.setStatus(RemoteCallBack.SUCCESS);
177
 			callback.setMsg(null);
177
 			callback.setMsg(null);

+ 2 - 2
xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java View File

16
  * 开发步骤:
16
  * 开发步骤:
17
  * 1、继承 “IJobHandler” ;
17
  * 1、继承 “IJobHandler” ;
18
  * 2、装配到Spring,例如加 “@Service” 注解;
18
  * 2、装配到Spring,例如加 “@Service” 注解;
19
- * 3、加 “@JobHander” 注解,自定义属性name的值;name值在配置新任务是使用;
19
+ * 3、加 “@JobHander” 注解,注解value值为新增任务生成的JobKey的值;多个JobKey用逗号分割;
20
  * 
20
  * 
21
  * @author xuxueli 2015-12-19 19:43:36
21
  * @author xuxueli 2015-12-19 19:43:36
22
  */
22
  */
23
-@JobHander(value="defaults_201607192222270796")
23
+@JobHander(value="defaults_201607192256270689,defaults_201607192256270689")
24
 @Service
24
 @Service
25
 public class DemoJobHandler extends IJobHandler {
25
 public class DemoJobHandler extends IJobHandler {
26
 	private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);
26
 	private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);