Ver código fonte

1、去除"任务名JobName"属性,"描述"改为"名称"属性,"任务名"改为"分组"属性;

xueli.xue 9 anos atrás
pai
commit
c1cda137d5

+ 12 - 14
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java Ver arquivo

@@ -1,18 +1,16 @@
1 1
 package com.xxl.job.admin.controller;
2 2
 
3
-import java.util.Map;
4
-
5
-import javax.annotation.Resource;
6
-
3
+import com.xxl.job.admin.core.constant.Constants.JobGroupEnum;
4
+import com.xxl.job.admin.core.model.ReturnT;
5
+import com.xxl.job.admin.service.IXxlJobService;
7 6
 import org.springframework.stereotype.Controller;
8 7
 import org.springframework.ui.Model;
9 8
 import org.springframework.web.bind.annotation.RequestMapping;
10 9
 import org.springframework.web.bind.annotation.RequestParam;
11 10
 import org.springframework.web.bind.annotation.ResponseBody;
12 11
 
13
-import com.xxl.job.admin.core.constant.Constants.JobGroupEnum;
14
-import com.xxl.job.admin.core.model.ReturnT;
15
-import com.xxl.job.admin.service.IXxlJobService;
12
+import javax.annotation.Resource;
13
+import java.util.Map;
16 14
 
17 15
 /**
18 16
  * index controller
@@ -43,22 +41,22 @@ public class JobInfoController {
43 41
 	@RequestMapping("/add")
44 42
 	@ResponseBody
45 43
 	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
46
-			String executorAddress, String executorHandler, String executorParam, 
44
+			String executorAddress, String executorParam,
47 45
 			String author, String alarmEmail, int alarmThreshold, 
48 46
 			int glueSwitch, String glueSource, String glueRemark) {
49 47
 		
50
-		return xxlJobService.add(jobGroup, jobCron, jobDesc, executorAddress, executorHandler, executorParam,
48
+		return xxlJobService.add(jobGroup, jobCron, jobDesc, executorAddress, executorParam,
51 49
 				author, alarmEmail, alarmThreshold, glueSwitch, glueSource, glueRemark);
52 50
 	}
53 51
 	
54 52
 	@RequestMapping("/reschedule")
55 53
 	@ResponseBody
56 54
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
57
-			String executorAddress, String executorHandler, String executorParam, 
58
-			String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
59
-		
60
-		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorHandler, executorParam, author,
61
-				alarmEmail, alarmThreshold, glueSwitch);
55
+			String executorAddress, String executorParam,
56
+			String author, String alarmEmail, int alarmThreshold) {
57
+
58
+		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorParam, author,
59
+				alarmEmail, alarmThreshold);
62 60
 	}
63 61
 	
64 62
 	@RequestMapping("/remove")

+ 16 - 19
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java Ver arquivo

@@ -1,21 +1,5 @@
1 1
 package com.xxl.job.admin.controller;
2 2
 
3
-import java.text.ParseException;
4
-import java.util.Date;
5
-import java.util.HashMap;
6
-import java.util.List;
7
-import java.util.Map;
8
-
9
-import javax.annotation.Resource;
10
-
11
-import org.apache.commons.lang.StringUtils;
12
-import org.apache.commons.lang.time.DateUtils;
13
-import org.springframework.stereotype.Controller;
14
-import org.springframework.ui.Model;
15
-import org.springframework.web.bind.annotation.RequestMapping;
16
-import org.springframework.web.bind.annotation.RequestParam;
17
-import org.springframework.web.bind.annotation.ResponseBody;
18
-
19 3
 import com.xxl.job.admin.core.constant.Constants.JobGroupEnum;
20 4
 import com.xxl.job.admin.core.model.ReturnT;
21 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
@@ -26,6 +10,20 @@ import com.xxl.job.core.handler.HandlerRepository.ActionEnum;
26 10
 import com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum;
27 11
 import com.xxl.job.core.util.HttpUtil;
28 12
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
13
+import org.apache.commons.lang.StringUtils;
14
+import org.apache.commons.lang.time.DateUtils;
15
+import org.springframework.stereotype.Controller;
16
+import org.springframework.ui.Model;
17
+import org.springframework.web.bind.annotation.RequestMapping;
18
+import org.springframework.web.bind.annotation.RequestParam;
19
+import org.springframework.web.bind.annotation.ResponseBody;
20
+
21
+import javax.annotation.Resource;
22
+import java.text.ParseException;
23
+import java.util.Date;
24
+import java.util.HashMap;
25
+import java.util.List;
26
+import java.util.Map;
29 27
 
30 28
 /**
31 29
  * index controller
@@ -155,11 +153,10 @@ public class JobLogController {
155 153
 		Map<String, String> reqMap = new HashMap<String, String>();
156 154
 		reqMap.put(HandlerParamEnum.TIMESTAMP.name(), String.valueOf(System.currentTimeMillis()));
157 155
 		reqMap.put(HandlerParamEnum.ACTION.name(), ActionEnum.KILL.name());
158
-		reqMap.put(HandlerParamEnum.GLUE_SWITCH.name(), String.valueOf(jobInfo.getGlueSwitch()));
159
-		reqMap.put(HandlerParamEnum.EXECUTOR_HANDLER.name(), log.getExecutorHandler());
160 156
 		reqMap.put(HandlerParamEnum.JOB_GROUP.name(), log.getJobGroup());
161 157
 		reqMap.put(HandlerParamEnum.JOB_NAME.name(), log.getJobName());
162
-		
158
+		reqMap.put(HandlerParamEnum.GLUE_SWITCH.name(), String.valueOf(jobInfo.getGlueSwitch()));
159
+
163 160
 		RemoteCallBack callBack = HttpUtil.post(HttpUtil.addressToUrl(log.getExecutorAddress()), reqMap);
164 161
 		if (HttpUtil.RemoteCallBack.SUCCESS.equals(callBack.getStatus())) {
165 162
 			log.setHandleStatus(HttpUtil.RemoteCallBack.FAIL);

+ 3 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java Ver arquivo

@@ -58,12 +58,11 @@ public class RemoteHttpJobBean extends QuartzJobBean {
58 58
 		params.put(HandlerParamEnum.LOG_ADDRESS.name(), XxlJobLogCallbackServer.getTrigger_log_address());
59 59
 		params.put(HandlerParamEnum.LOG_ID.name(), String.valueOf(jobLog.getId()));
60 60
 
61
-		params.put(HandlerParamEnum.EXECUTOR_HANDLER.name(), jobInfo.getExecutorHandler());
61
+		params.put(HandlerParamEnum.JOB_GROUP.name(), jobInfo.getJobGroup());
62
+		params.put(HandlerParamEnum.JOB_NAME.name(), jobInfo.getJobName());
62 63
 		params.put(HandlerParamEnum.EXECUTOR_PARAMS.name(), jobInfo.getExecutorParam());
63 64
 
64 65
 		params.put(HandlerParamEnum.GLUE_SWITCH.name(), String.valueOf(jobInfo.getGlueSwitch()));
65
-		params.put(HandlerParamEnum.JOB_GROUP.name(), jobInfo.getJobGroup());
66
-		params.put(HandlerParamEnum.JOB_NAME.name(), jobInfo.getJobName());
67 66
 
68 67
 		// failover trigger
69 68
 		RemoteCallBack callback = failoverTrigger(jobInfo.getExecutorAddress(), params, jobLog);
@@ -86,7 +85,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
86 85
 	
87 86
 	/**
88 87
 	 * failover for trigger remote address
89
-	 * @param addressArr
88
+	 * @param handler_address
90 89
 	 * @return
91 90
 	 */
92 91
 	public RemoteCallBack failoverTrigger(String handler_address, HashMap<String, String> handler_params, XxlJobLog jobLog){

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java Ver arquivo

@@ -14,13 +14,13 @@ public interface IXxlJobService {
14 14
 	public Map<String, Object> pageList(int start, int length, String jobGroup, String jobDesc, String filterTime);
15 15
 	
16 16
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
17
-			String executorAddress,	String executorHandler, String executorParam, 
17
+			String executorAddress,	String executorParam,
18 18
 			String author, String alarmEmail, int alarmThreshold,
19 19
 			int glueSwitch, String glueSource, String glueRemark);
20 20
 	
21 21
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
22
-			String handler_address, String handler_name, String handler_params, 
23
-			String author, String alarmEmail, int alarmThreshold, int glueSwitch);
22
+			String handler_address, String handler_params,
23
+			String author, String alarmEmail, int alarmThreshold);
24 24
 	
25 25
 	public ReturnT<String> remove(String jobGroup, String jobName);
26 26
 	

+ 9 - 22
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java Ver arquivo

@@ -1,13 +1,12 @@
1 1
 package com.xxl.job.admin.service.impl;
2 2
 
3
-import java.util.HashMap;
4
-import java.util.List;
5
-import java.util.Map;
6
-import java.util.UUID;
3
+import java.util.*;
7 4
 
8 5
 import javax.annotation.Resource;
9 6
 
10 7
 import org.apache.commons.lang.StringUtils;
8
+import org.apache.commons.lang.time.DateFormatUtils;
9
+import org.apache.commons.lang.time.FastDateFormat;
11 10
 import org.quartz.CronExpression;
12 11
 import org.quartz.SchedulerException;
13 12
 import org.springframework.stereotype.Service;
@@ -60,7 +59,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
60 59
 
61 60
 	@Override
62 61
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
63
-			String executorAddress,	String executorHandler, String executorParam, 
62
+			String executorAddress,	String executorParam,
64 63
 			String author, String alarmEmail, int alarmThreshold,
65 64
 			int glueSwitch, String glueSource, String glueRemark) {
66 65
 		// valid
@@ -76,9 +75,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
76 75
 		if (StringUtils.isBlank(executorAddress)) {
77 76
 			return new ReturnT<String>(500, "请输入“执行器地址”");
78 77
 		}
79
-		if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
80
-			return new ReturnT<String>(500, "请输入“jobHandler”");
81
-		}
82 78
 		if (StringUtils.isBlank(author)) {
83 79
 			return new ReturnT<String>(500, "请输入“负责人”");
84 80
 		}
@@ -90,14 +86,14 @@ public class XxlJobServiceImpl implements IXxlJobService {
90 86
 		}
91 87
 
92 88
 		// generate jobName
93
-		String jobName = UUID.randomUUID().toString();
89
+		String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
94 90
 		try {
95 91
 			if (DynamicSchedulerUtil.checkExists(jobName, jobGroup)) {
96
-				return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
92
+				return new ReturnT<String>(500, "系统繁忙,请稍后重试");
97 93
 			}
98 94
 		} catch (SchedulerException e1) {
99 95
 			e1.printStackTrace();
100
-			return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
96
+			return new ReturnT<String>(500, "系统繁忙,请稍后重试");
101 97
 		}
102 98
 
103 99
 		// Backup to the database
@@ -114,7 +110,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
114 110
 		jobInfo.setGlueSource(glueSource);
115 111
 		jobInfo.setGlueRemark(glueRemark);
116 112
 		jobInfo.setExecutorAddress(executorAddress);
117
-		jobInfo.setExecutorHandler(executorHandler);
118 113
 		jobInfo.setExecutorParam(executorParam);
119 114
 		xxlJobInfoDao.save(jobInfo);
120 115
 
@@ -135,8 +130,8 @@ public class XxlJobServiceImpl implements IXxlJobService {
135 130
 
136 131
 	@Override
137 132
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
138
-			String executorAddress,	String executorHandler, String executorParam, 
139
-			String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
133
+			String executorAddress, String executorParam,
134
+			String author, String alarmEmail, int alarmThreshold) {
140 135
 		
141 136
 		// valid
142 137
 		if (JobGroupEnum.match(jobGroup) == null) {
@@ -154,18 +149,12 @@ public class XxlJobServiceImpl implements IXxlJobService {
154 149
 		if (StringUtils.isBlank(executorAddress)) {
155 150
 			return new ReturnT<String>(500, "请输入“执行器地址”");
156 151
 		}
157
-		if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
158
-			return new ReturnT<String>(500, "请输入“jobHandler”");
159
-		}
160 152
 		if (StringUtils.isBlank(author)) {
161 153
 			return new ReturnT<String>(500, "请输入“负责人”");
162 154
 		}
163 155
 		if (StringUtils.isBlank(alarmEmail)) {
164 156
 			return new ReturnT<String>(500, "请输入“报警邮件”");
165 157
 		}
166
-		if (alarmThreshold < 0) {
167
-			alarmThreshold = 0;
168
-		}
169 158
 		
170 159
 		XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
171 160
 		jobInfo.setJobDesc(jobDesc);
@@ -173,9 +162,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
173 162
 		jobInfo.setAuthor(author);
174 163
 		jobInfo.setAlarmEmail(alarmEmail);
175 164
 		jobInfo.setAlarmThreshold(alarmThreshold);
176
-		jobInfo.setGlueSwitch(glueSwitch);
177 165
 		jobInfo.setExecutorAddress(executorAddress);
178
-		jobInfo.setExecutorHandler(executorHandler);
179 166
 		jobInfo.setExecutorParam(executorParam);
180 167
 		
181 168
 		try {

+ 24 - 25
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl Ver arquivo

@@ -73,7 +73,6 @@
73 73
 					                  	<th name="jobCron" >Cron</th>
74 74
 					                  	<th name="jobClass" >JobBean</th>
75 75
 					                  	<th name="executorAddress" >执行器地址</th>
76
-					                  	<th name="executorHandler" >JobHandler</th>
77 76
 					                  	<th name="executorParam" >任务参数</th>
78 77
 					                  	<th name="addTime" >新增时间</th>
79 78
 					                  	<th name="updateTime" >更新时间</th>
@@ -121,16 +120,16 @@
121 120
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
122 121
 					</div>
123 122
 					<div class="form-group">
124
-                        <label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
125
-                        <div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
126 123
                         <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
127 124
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
125
+                        <label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
126
+                        <div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
128 127
 					</div>
129 128
 					<div class="form-group">
130
-						<label for="lastname" class="col-sm-2 control-label">JobHandler<font color="red">*</font></label>
131
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="请输入“jobHandler”" maxlength="50" ></div>
132 129
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
133 130
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
131
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
132
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
134 133
 					</div>
135 134
 					<div class="form-group">
136 135
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
@@ -139,20 +138,19 @@
139 138
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
140 139
 					</div>
141 140
                     <div class="form-group">
142
-                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
143
-                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
141
+                        <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
142
+                        <div class="col-sm-4">
143
+                            <select class="form-control" name="glueSwitch" >
144
+                                <option value="0" >BEAN模式</option>
145
+                                <option value="1" >GLUE模式</option>
146
+                            </select>
147
+                        </div>
144 148
                     </div>
145 149
 					<div class="form-group">
146 150
 						<div class="col-sm-offset-3 col-sm-6">
147 151
 							<button type="submit" class="btn btn-primary"  >保存</button>
148 152
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
149 153
 						</div>
150
-						<div class="col-sm-3">
151
-							<div class="checkbox">
152
-		                        <label><input type="checkbox" class="ifGLUE" >开启GLUE模式<font color="black">*</font></label>
153
-		                        <input type="hidden" name="glueSwitch" value="0" >
154
-	                    	</div>
155
-						</div>
156 154
 					</div>
157 155
 
158 156
 <input type="hidden" name="glueRemark" value="GLUE代码初始化" >
@@ -207,17 +205,17 @@ public class DemoJobHandler extends IJobHandler {
207 205
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
208 206
 					</div>
209 207
 					<div class="form-group">
210
-						<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
211
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
212 208
                         <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
213 209
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
210
+                        <label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
211
+                        <div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
214 212
 					</div>
215 213
 					
216 214
 					<div class="form-group">
217
-						<label for="lastname" class="col-sm-2 control-label">JobHandler<font color="red">*</font></label>
218
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="请输入“jobHandler”" maxlength="50" ></div>
219 215
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
220 216
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
217
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
218
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
221 219
 					</div>
222 220
 					<div class="form-group">
223 221
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
@@ -226,20 +224,21 @@ public class DemoJobHandler extends IJobHandler {
226 224
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
227 225
 					</div>
228 226
                     <div class="form-group">
229
-                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
230
-                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
227
+                        <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
228
+                        <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>
234
+                        <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>
231 236
                     </div>
232 237
 					<div class="form-group">
233 238
 						<div class="col-sm-offset-3 col-sm-6">
234 239
 							<button type="submit" class="btn btn-primary"  >保存</button>
235 240
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
236 241
 						</div>
237
-						<div class="col-sm-3">
238
-							<div class="checkbox">
239
-		                        <label><input type="checkbox" class="ifGLUE" >开启GLUE模式<font color="black">*</font></label>
240
-		                        <input type="hidden" name="glueSwitch" value="0" >
241
-	                    	</div>
242
-						</div>
243 242
 					</div>
244 243
 				</form>
245 244
          	</div>

+ 30 - 47
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js Ver arquivo

@@ -39,7 +39,6 @@ $(function() {
39 39
 	                { "data": 'jobCron', "visible" : true},
40 40
 	                { "data": 'jobClass', "visible" : false},
41 41
 	                { "data": 'executorAddress', "visible" : false},
42
-	                { "data": 'executorHandler', "visible" : false},
43 42
 	                { "data": 'executorParam', "visible" : false},
44 43
 	                { 
45 44
 	                	"data": 'addTime', 
@@ -100,7 +99,6 @@ $(function() {
100 99
 	                							' jobDesc="'+ row.jobDesc +'" '+
101 100
 	                							' jobClass="'+ row.jobClass +'" '+
102 101
 	                							' executorAddress="'+row.executorAddress +'" '+
103
-	                							' executorHandler="'+ row.executorHandler +'" '+
104 102
 	                							' executorParam="'+ row.executorParam +'" '+
105 103
 	                							' author="'+ row.author +'" '+
106 104
 	                							' alarmEmail="'+ row.alarmEmail +'" '+
@@ -225,9 +223,6 @@ $(function() {
225 223
             executorAddress : {
226 224
             	required : true
227 225
             },
228
-            executorHandler : {
229
-            	required : true
230
-            },
231 226
             alarmEmail : {
232 227
             	required : true
233 228
             },
@@ -249,9 +244,6 @@ $(function() {
249 244
             executorAddress : {
250 245
             	required :"请输入“执行器地址”."
251 246
             },
252
-            executorHandler : {
253
-            	required : "请输入“JobHandler”."
254
-            },
255 247
             alarmEmail : {
256 248
             	required : "请输入“报警邮件”."
257 249
             },
@@ -296,50 +288,28 @@ $(function() {
296 288
 		$(".remote_panel").show();	// remote
297 289
 	});
298 290
 	
299
-	// GLUE模式开启
300
-	$("#addModal .form .ifGLUE").click(function(){
301
-		var ifGLUE = $(this).is(':checked');
302
-		var $executorHandler = $("#addModal .form input[name='executorHandler']");
303
-		var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
304
-		if (ifGLUE) {
305
-			$executorHandler.val("");
306
-			$executorHandler.attr("readonly","readonly");
307
-			$glueSwitch.val(1);
308
-		} else {
309
-			$executorHandler.removeAttr("readonly");
310
-			$glueSwitch.val(0);
311
-		}
312
-	});
313
-	$("#updateModal .form .ifGLUE").click(function(){
314
-		var ifGLUE = $(this).is(':checked');
315
-		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
316
-		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
317
-		if (ifGLUE) {
318
-			$executorHandler.val("");
319
-			$executorHandler.attr("readonly","readonly");
320
-			$glueSwitch.val(1);
321
-		} else {
322
-			$executorHandler.removeAttr("readonly");
323
-			$glueSwitch.val(0);
324
-		}
325
-	});
326
-	
327 291
 	// 更新
328 292
 	$("#job_list").on('click', '.update',function() {
329 293
 
330 294
 		// base data
331
-		$("#updateModal .form input[name='jobGroupTitle']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").attr("selected",true);
332 295
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
333 296
 		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
334 297
 		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
335 298
 		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
336 299
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
337
-		$("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler"));
338 300
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
339 301
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
340 302
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
341 303
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
342
-		$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
304
+
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);
310
+
311
+		// generate job key
312
+		$("#updateModal .form input[name='jobKey']").val( $(this).parent('p').attr("jobGroup") + "_" + $(this).parent('p').attr("jobName") );
343 313
 
344 314
 		// GLUE check
345 315
 		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
@@ -370,9 +340,6 @@ $(function() {
370 340
 			executorAddress : {
371 341
 				required : true
372 342
 			},
373
-			executorHandler : {
374
-				required : true
375
-			},
376 343
 			alarmEmail : {
377 344
 				required : true
378 345
 			},
@@ -394,9 +361,6 @@ $(function() {
394 361
 			executorAddress : {
395 362
 				required :"请输入“执行器地址”."
396 363
 			},
397
-			executorHandler : {
398
-				required : "请输入“JobHandler”."
399
-			},
400 364
 			alarmEmail : {
401 365
 				required : "请输入“报警邮件”."
402 366
 			},
@@ -419,6 +383,8 @@ $(function() {
419 383
             element.parent('div').append(error);  
420 384
         },
421 385
         submitHandler : function(form) {
386
+
387
+			// post
422 388
     		$.post(base_url + "/jobinfo/reschedule", $("#updateModal .form").serialize(), function(data, status) {
423 389
     			if (data.code == "200") {
424 390
     				ComAlert.show(1, "更新成功", function(){
@@ -437,8 +403,24 @@ $(function() {
437 403
 	$("#updateModal").on('hide.bs.modal', function () {
438 404
 		$("#updateModal .form")[0].reset()
439 405
 	});
440
-	
441
-	
406
+
407
+	// GLUE模式开启
408
+	/*
409
+	 $("#addModal .form .ifGLUE").click(function(){
410
+         var ifGLUE = $(this).is(':checked');
411
+         var $executorHandler = $("#addModal .form input[name='executorHandler']");
412
+         var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
413
+         if (ifGLUE) {
414
+         $executorHandler.val("");
415
+         $executorHandler.attr("readonly","readonly");
416
+         $glueSwitch.val(1);
417
+         } else {
418
+         $executorHandler.removeAttr("readonly");
419
+         $glueSwitch.val(0);
420
+         }
421
+	 });
422
+	 */
423
+
442 424
 	/*
443 425
 	// 新增-添加参数
444 426
 	$("#addModal .addParam").on('click', function () {
@@ -454,4 +436,5 @@ $(function() {
454 436
 		});
455 437
 	});
456 438
 	*/
439
+
457 440
 });

+ 1 - 1
xxl-job-core/src/main/java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java Ver arquivo

@@ -88,7 +88,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
88 88
 		Map<String, Object> serviceBeanMap = XxlJobExecutor.applicationContext.getBeansWithAnnotation(JobHander.class);
89 89
         if (serviceBeanMap!=null && serviceBeanMap.size()>0) {
90 90
             for (Object serviceBean : serviceBeanMap.values()) {
91
-                String jobName = serviceBean.getClass().getAnnotation(JobHander.class).name();
91
+                String jobName = serviceBean.getClass().getAnnotation(JobHander.class).value();
92 92
                 if (jobName!=null && jobName.trim().length()>0 && serviceBean instanceof IJobHandler) {
93 93
                 	IJobHandler handler = (IJobHandler) serviceBean;
94 94
                 	HandlerRepository.regist(jobName, handler);

+ 48 - 62
xxl-job-core/src/main/java/com/xxl/job/core/handler/HandlerRepository.java Ver arquivo

@@ -1,19 +1,18 @@
1 1
 package com.xxl.job.core.handler;
2 2
 
3
-import java.util.Date;
4
-import java.util.HashMap;
5
-import java.util.Map;
6
-import java.util.concurrent.ConcurrentHashMap;
7
-import java.util.concurrent.LinkedBlockingQueue;
8
-
9
-import org.slf4j.Logger;
10
-import org.slf4j.LoggerFactory;
11
-
12 3
 import com.xxl.job.core.handler.impl.GlueJobHandler;
13 4
 import com.xxl.job.core.log.XxlJobFileAppender;
14 5
 import com.xxl.job.core.util.HttpUtil;
15 6
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
16 7
 import com.xxl.job.core.util.JacksonUtil;
8
+import org.slf4j.Logger;
9
+import org.slf4j.LoggerFactory;
10
+
11
+import java.util.Date;
12
+import java.util.HashMap;
13
+import java.util.Map;
14
+import java.util.concurrent.ConcurrentHashMap;
15
+import java.util.concurrent.LinkedBlockingQueue;
17 16
 
18 17
 /**
19 18
  * handler repository
@@ -32,9 +31,13 @@ public class HandlerRepository {
32 31
 		 */
33 32
 		ACTION,
34 33
 		/**
35
-		 * remote executor jobhandler
34
+		 * job group
35
+		 */
36
+		JOB_GROUP,
37
+		/**
38
+		 * job name
36 39
 		 */
37
-		EXECUTOR_HANDLER,
40
+		JOB_NAME,
38 41
 		/**
39 42
 		 * params of jobhandler
40 43
 		 */
@@ -44,14 +47,6 @@ public class HandlerRepository {
44 47
 		 */
45 48
 		GLUE_SWITCH,
46 49
 		/**
47
-		 * job group
48
-		 */
49
-		JOB_GROUP,
50
-		/**
51
-		 * job name
52
-		 */
53
-		JOB_NAME,
54
-		/**
55 50
 		 * address for callback log
56 51
 		 */
57 52
 		LOG_ADDRESS,
@@ -99,37 +94,39 @@ public class HandlerRepository {
99 94
 					
100 95
 		// parse namespace
101 96
 		if (namespace.equals(ActionEnum.RUN.name())) {
102
-			// push data to queue
97
+
98
+			// generate jobKey
99
+			String job_group = _param.get(HandlerParamEnum.JOB_GROUP.name());
100
+			String job_name = _param.get(HandlerParamEnum.JOB_NAME.name());
101
+			if (job_group == null || job_group.trim().length()==0 || job_name == null || job_name.trim().length()==0) {
102
+				callback.setMsg("JOB_GROUP or JOB_NAME is null.");
103
+				return JacksonUtil.writeValueAsString(callback);
104
+			}
105
+			String jobKey = job_group.concat("_").concat(job_name);
106
+
107
+			// glue switch
103 108
 			String handler_glue_switch = _param.get(HandlerParamEnum.GLUE_SWITCH.name());
104
-			HandlerThread handlerThread = null;
109
+			if (handler_glue_switch==null || handler_glue_switch.trim().length()==0){
110
+				callback.setMsg("GLUE_SWITCH is null.");
111
+				return JacksonUtil.writeValueAsString(callback);
112
+			}
113
+
114
+			HandlerThread handlerThread = handlerTreadMap.get(jobKey);;
105 115
 			if ("0".equals(handler_glue_switch)) {
106 116
 				// bean model
107
-				String handler_name = _param.get(HandlerParamEnum.EXECUTOR_HANDLER.name());
108
-				if (handler_name == null || handler_name.trim().length()==0) {
109
-					callback.setMsg("bean model handler[HANDLER_NAME] not found.");
110
-					return JacksonUtil.writeValueAsString(callback);
111
-				}
112
-				handlerThread = handlerTreadMap.get(handler_name);
113 117
 				if (handlerThread == null) {
114
-					callback.setMsg("handler[" + handler_name + "] not found.");
118
+					callback.setMsg("handler for jobKey=[" + jobKey + "] not found.");
115 119
 					return JacksonUtil.writeValueAsString(callback);
116 120
 				}
117 121
 			} else {
118 122
 				// glue
119
-				String job_group = _param.get(HandlerParamEnum.JOB_GROUP.name());
120
-				String job_name = _param.get(HandlerParamEnum.JOB_NAME.name());
121
-				if (job_group == null || job_group.trim().length()==0 || job_name == null || job_name.trim().length()==0) {
122
-					callback.setMsg("glue model handler[job group or name] is null.");
123
-					return JacksonUtil.writeValueAsString(callback);
124
-				}
125
-				String glueHandleName = "glue_".concat(job_group).concat("_").concat(job_name);
126
-				handlerThread = handlerTreadMap.get(glueHandleName);
127 123
 				if (handlerThread==null) {
128
-					HandlerRepository.regist(glueHandleName, new GlueJobHandler(job_group, job_name));
124
+					HandlerRepository.regist(jobKey, new GlueJobHandler(job_group, job_name));
129 125
 				}
130
-				handlerThread = handlerTreadMap.get(glueHandleName);
126
+				handlerThread = handlerTreadMap.get(jobKey);
131 127
 			}
132
-			
128
+
129
+			// push data to queue
133 130
 			handlerThread.pushData(_param);
134 131
 			callback.setStatus(RemoteCallBack.SUCCESS);
135 132
 		} else if (namespace.equals(ActionEnum.LOG.name())) {
@@ -154,36 +151,25 @@ public class HandlerRepository {
154 151
 			callback.setStatus(RemoteCallBack.SUCCESS);
155 152
 			callback.setMsg(logConteng);
156 153
 		} else if (namespace.equals(ActionEnum.KILL.name())) {
157
-			// kill handlerThread, and create new one
158
-			String handler_glue_switch = _param.get(HandlerParamEnum.GLUE_SWITCH.name());
159
-			String handlerName = null;
160
-			if ("0".equals(handler_glue_switch)) {
161
-				String executor_handler = _param.get(HandlerParamEnum.EXECUTOR_HANDLER.name());
162
-				if (executor_handler==null) {
163
-					callback.setMsg("bean job , param[EXECUTOR_HANDLER] is null");
164
-					return JacksonUtil.writeValueAsString(callback);
165
-				}
166
-				handlerName = executor_handler;
167
-			} else {
168
-				// glue
169
-				String job_group = _param.get(HandlerParamEnum.JOB_GROUP.name());
170
-				String job_name = _param.get(HandlerParamEnum.JOB_NAME.name());
171
-				if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) {
172
-					callback.setMsg("glue job , param[JOB_GROUP or JOB_NAME] is null");
173
-					return JacksonUtil.writeValueAsString(callback);
174
-				}
175
-				handlerName = "glue_".concat(job_group).concat("_").concat(job_name);
154
+			// generate jobKey
155
+			String job_group = _param.get(HandlerParamEnum.JOB_GROUP.name());
156
+			String job_name = _param.get(HandlerParamEnum.JOB_NAME.name());
157
+			if (job_group == null || job_group.trim().length()==0 || job_name == null || job_name.trim().length()==0) {
158
+				callback.setMsg("JOB_GROUP or JOB_NAME is null.");
159
+				return JacksonUtil.writeValueAsString(callback);
176 160
 			}
177
-			
178
-			HandlerThread handlerThread = handlerTreadMap.get(handlerName);
161
+			String jobKey = job_group.concat("_").concat(job_name);
162
+
163
+			// kill handlerThread, and create new one
164
+			HandlerThread handlerThread = handlerTreadMap.get(jobKey);
179 165
 			if (handlerThread != null) {
180 166
 				IJobHandler handler = handlerThread.getHandler();
181 167
 				handlerThread.toStop();
182 168
 				handlerThread.interrupt();
183
-				regist(handlerName, handler);
169
+				regist(jobKey, handler);
184 170
 				callback.setStatus(RemoteCallBack.SUCCESS);
185 171
 			} else {
186
-				callback.setMsg("job handler[" + handlerName + "] not found.");
172
+				callback.setMsg("handler for jobKey=[" + jobKey + "] not found.");
187 173
 			}
188 174
 				
189 175
 		} else if (namespace.equals(ActionEnum.BEAT.name())) {

+ 1 - 1
xxl-job-core/src/main/java/com/xxl/job/core/handler/annotation/JobHander.java Ver arquivo

@@ -15,6 +15,6 @@ import java.lang.annotation.Target;
15 15
 @Inherited
16 16
 public @interface JobHander {
17 17
 
18
-    String name();
18
+    String value() default "";
19 19
     
20 20
 }

+ 1 - 1
xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java Ver arquivo

@@ -20,7 +20,7 @@ import com.xxl.job.core.handler.annotation.JobHander;
20 20
  * 
21 21
  * @author xuxueli 2015-12-19 19:43:36
22 22
  */
23
-@JobHander(name="demoJobHandler")
23
+@JobHander(value="defaults_201607192222270796")
24 24
 @Service
25 25
 public class DemoJobHandler extends IJobHandler {
26 26
 	private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);