Browse Source

重要重构;

xueli.xue 9 years ago
parent
commit
9591be6b13
19 changed files with 85 additions and 243 deletions
  1. 3 9
      db/tables_xxl_job.sql
  2. 5 8
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
  3. 10 19
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
  4. 12 29
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
  5. 0 28
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
  6. 9 22
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java
  7. 7 11
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java
  8. 2 4
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java
  9. 2 9
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
  10. 1 1
      xxl-job-admin/src/main/resources/config.properties
  11. 1 15
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
  12. 0 17
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
  13. 26 29
      xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
  14. 0 4
      xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
  15. 6 29
      xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
  16. 0 5
      xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
  17. 0 1
      xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java
  18. 0 2
      xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobLogTest.java
  19. 1 1
      xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java

+ 3 - 9
db/tables_xxl_job.sql View File

145
 
145
 
146
 
146
 
147
 
147
 
148
-CREATE TABLE XXL_JOB_QRTZ_TRIGGER_INFO (
148
+CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
149
   `id` int(11) NOT NULL AUTO_INCREMENT,
149
   `id` int(11) NOT NULL AUTO_INCREMENT,
150
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
150
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
151
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
151
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
152
   `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
152
   `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
153
   `job_desc` varchar(255) NOT NULL,
153
   `job_desc` varchar(255) NOT NULL,
154
-  `job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
155
   `add_time` datetime DEFAULT NULL,
154
   `add_time` datetime DEFAULT NULL,
156
   `update_time` datetime DEFAULT NULL,
155
   `update_time` datetime DEFAULT NULL,
157
   `author` varchar(64) DEFAULT NULL COMMENT '作者',
156
   `author` varchar(64) DEFAULT NULL COMMENT '作者',
158
   `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
157
   `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
159
-  `alarm_threshold` int(11) DEFAULT NULL COMMENT '报警阀值(连续失败次数)',
160
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,有多个则逗号分隔',
158
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,有多个则逗号分隔',
161
-  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
162
   `executor_param` varchar(255) DEFAULT NULL COMMENT '执行器任务参数',
159
   `executor_param` varchar(255) DEFAULT NULL COMMENT '执行器任务参数',
163
   `glue_switch` int(11) DEFAULT '0' COMMENT 'GLUE模式开关:0-否,1-是',
160
   `glue_switch` int(11) DEFAULT '0' COMMENT 'GLUE模式开关:0-否,1-是',
164
   `glue_source` text COMMENT 'GLUE源代码',
161
   `glue_source` text COMMENT 'GLUE源代码',
166
   PRIMARY KEY (`id`)
163
   PRIMARY KEY (`id`)
167
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
164
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
168
 
165
 
169
-CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOG (
166
+
167
+CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
170
   `id` int(11) NOT NULL AUTO_INCREMENT,
168
   `id` int(11) NOT NULL AUTO_INCREMENT,
171
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
169
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
172
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
170
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
173
-  `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON表达式',
174
-  `job_desc` varchar(255) NOT NULL,
175
-  `job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
176
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
171
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
177
-  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
178
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
172
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
179
   `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
173
   `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
180
   `trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',
174
   `trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',

+ 5 - 8
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java View File

40
 	
40
 	
41
 	@RequestMapping("/add")
41
 	@RequestMapping("/add")
42
 	@ResponseBody
42
 	@ResponseBody
43
-	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
44
-			String executorAddress, String executorParam,
45
-			String author, String alarmEmail, int alarmThreshold, 
43
+	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
44
+			String executorAddress, String executorParam, String author, String alarmEmail,
46
 			int glueSwitch, String glueSource, String glueRemark) {
45
 			int glueSwitch, String glueSource, String glueRemark) {
47
 		
46
 		
48
 		return xxlJobService.add(jobGroup, jobCron, jobDesc, executorAddress, executorParam,
47
 		return xxlJobService.add(jobGroup, jobCron, jobDesc, executorAddress, executorParam,
49
-				author, alarmEmail, alarmThreshold, glueSwitch, glueSource, glueRemark);
48
+				author, alarmEmail, glueSwitch, glueSource, glueRemark);
50
 	}
49
 	}
51
 	
50
 	
52
 	@RequestMapping("/reschedule")
51
 	@RequestMapping("/reschedule")
53
 	@ResponseBody
52
 	@ResponseBody
54
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
53
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
55
-			String executorAddress, String executorParam,
56
-			String author, String alarmEmail, int alarmThreshold) {
54
+			String executorAddress, String executorParam, String author, String alarmEmail) {
57
 
55
 
58
-		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorParam, author,
59
-				alarmEmail, alarmThreshold);
56
+		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorParam, author, alarmEmail);
60
 	}
57
 	}
61
 	
58
 	
62
 	@RequestMapping("/remove")
59
 	@RequestMapping("/remove")

+ 10 - 19
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java View File

1
 package com.xxl.job.admin.core.jobbean;
1
 package com.xxl.job.admin.core.jobbean;
2
 
2
 
3
-import java.text.MessageFormat;
4
-import java.util.Arrays;
5
-import java.util.Collections;
6
-import java.util.Date;
7
-import java.util.HashMap;
8
-import java.util.List;
9
-
10
-import org.apache.commons.lang.StringUtils;
11
-import org.quartz.JobExecutionContext;
12
-import org.quartz.JobExecutionException;
13
-import org.quartz.JobKey;
14
-import org.slf4j.Logger;
15
-import org.slf4j.LoggerFactory;
16
-import org.springframework.scheduling.quartz.QuartzJobBean;
17
-
18
 import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
3
 import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
19
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
 import com.xxl.job.admin.core.model.XxlJobInfo;
20
 import com.xxl.job.admin.core.model.XxlJobLog;
5
 import com.xxl.job.admin.core.model.XxlJobLog;
24
 import com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum;
9
 import com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum;
25
 import com.xxl.job.core.util.HttpUtil;
10
 import com.xxl.job.core.util.HttpUtil;
26
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
11
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
12
+import org.apache.commons.lang.StringUtils;
13
+import org.quartz.JobExecutionContext;
14
+import org.quartz.JobExecutionException;
15
+import org.quartz.JobKey;
16
+import org.slf4j.Logger;
17
+import org.slf4j.LoggerFactory;
18
+import org.springframework.scheduling.quartz.QuartzJobBean;
19
+
20
+import java.text.MessageFormat;
21
+import java.util.*;
27
 
22
 
28
 /**
23
 /**
29
  * http job bean
24
  * http job bean
44
 		XxlJobLog jobLog = new XxlJobLog();
39
 		XxlJobLog jobLog = new XxlJobLog();
45
 		jobLog.setJobGroup(jobInfo.getJobGroup());
40
 		jobLog.setJobGroup(jobInfo.getJobGroup());
46
 		jobLog.setJobName(jobInfo.getJobName());
41
 		jobLog.setJobName(jobInfo.getJobName());
47
-		jobLog.setJobCron(jobInfo.getJobCron());
48
-		jobLog.setJobDesc(jobInfo.getJobDesc());
49
-		jobLog.setJobClass(jobInfo.getJobClass());
50
 		DynamicSchedulerUtil.xxlJobLogDao.save(jobLog);
42
 		DynamicSchedulerUtil.xxlJobLogDao.save(jobLog);
51
 		logger.info(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
43
 		logger.info(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
52
 		
44
 		
66
 
58
 
67
 		// failover trigger
59
 		// failover trigger
68
 		RemoteCallBack callback = failoverTrigger(jobInfo.getExecutorAddress(), params, jobLog);
60
 		RemoteCallBack callback = failoverTrigger(jobInfo.getExecutorAddress(), params, jobLog);
69
-		jobLog.setExecutorHandler(jobInfo.getGlueSwitch()==0?jobInfo.getExecutorHandler():"GLUE任务");
70
 		jobLog.setExecutorParam(jobInfo.getExecutorParam());
61
 		jobLog.setExecutorParam(jobInfo.getExecutorParam());
71
 		logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, callback:{}", jobLog.getId(), callback);
62
 		logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, callback:{}", jobLog.getId(), callback);
72
 		
63
 		

+ 12 - 29
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java View File

14
 	private String jobName;		// 任务名
14
 	private String jobName;		// 任务名
15
 	private String jobCron;		// 任务执行CRON表达式 【base on quartz】
15
 	private String jobCron;		// 任务执行CRON表达式 【base on quartz】
16
 	private String jobDesc;
16
 	private String jobDesc;
17
-	private String jobClass;	// 任务执行JobBean 【base on quartz】
18
-	//private String jobData;		// 任务执行数据 Map-JSON-String
19
 	
17
 	
20
 	private Date addTime;
18
 	private Date addTime;
21
 	private Date updateTime;
19
 	private Date updateTime;
22
 	
20
 	
23
 	private String author;		// 负责人
21
 	private String author;		// 负责人
24
 	private String alarmEmail;	// 报警邮件
22
 	private String alarmEmail;	// 报警邮件
25
-	private int alarmThreshold;	// 报警阀值
26
 	
23
 	
27
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
24
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
28
-	private String executorHandler;	// 执行器,任务Handler名称
29
 	private String executorParam;	// 执行器,任务参数
25
 	private String executorParam;	// 执行器,任务参数
30
 	
26
 	
31
 	private int glueSwitch;		// GLUE模式开关:0-否,1-是
27
 	private int glueSwitch;		// GLUE模式开关:0-否,1-是
35
 	// copy from quartz
31
 	// copy from quartz
36
 	private String jobStatus;	// 任务状态 【base on quartz】
32
 	private String jobStatus;	// 任务状态 【base on quartz】
37
 
33
 
34
+	// generate job key
35
+	private String jobKey;
36
+
38
 	public int getId() {
37
 	public int getId() {
39
 		return id;
38
 		return id;
40
 	}
39
 	}
75
 		this.jobDesc = jobDesc;
74
 		this.jobDesc = jobDesc;
76
 	}
75
 	}
77
 
76
 
78
-	public String getJobClass() {
79
-		return jobClass;
80
-	}
81
-
82
-	public void setJobClass(String jobClass) {
83
-		this.jobClass = jobClass;
84
-	}
85
-
86
 	public Date getAddTime() {
77
 	public Date getAddTime() {
87
 		return addTime;
78
 		return addTime;
88
 	}
79
 	}
115
 		this.alarmEmail = alarmEmail;
106
 		this.alarmEmail = alarmEmail;
116
 	}
107
 	}
117
 
108
 
118
-	public int getAlarmThreshold() {
119
-		return alarmThreshold;
120
-	}
121
-
122
-	public void setAlarmThreshold(int alarmThreshold) {
123
-		this.alarmThreshold = alarmThreshold;
124
-	}
125
-
126
 	public String getExecutorAddress() {
109
 	public String getExecutorAddress() {
127
 		return executorAddress;
110
 		return executorAddress;
128
 	}
111
 	}
131
 		this.executorAddress = executorAddress;
114
 		this.executorAddress = executorAddress;
132
 	}
115
 	}
133
 
116
 
134
-	public String getExecutorHandler() {
135
-		return executorHandler;
136
-	}
137
-
138
-	public void setExecutorHandler(String executorHandler) {
139
-		this.executorHandler = executorHandler;
140
-	}
141
-
142
 	public String getExecutorParam() {
117
 	public String getExecutorParam() {
143
 		return executorParam;
118
 		return executorParam;
144
 	}
119
 	}
178
 	public void setJobStatus(String jobStatus) {
153
 	public void setJobStatus(String jobStatus) {
179
 		this.jobStatus = jobStatus;
154
 		this.jobStatus = jobStatus;
180
 	}
155
 	}
181
-	
156
+
157
+	public String getJobKey() {
158
+		return jobGroup.concat("_").concat(jobName);
159
+	}
160
+
161
+	public void setJobKey(String jobKey) {
162
+		this.jobKey = jobKey;
163
+	}
164
+
182
 }
165
 }

+ 0 - 28
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java View File

13
 	// job info
13
 	// job info
14
 	private String jobGroup;
14
 	private String jobGroup;
15
 	private String jobName;
15
 	private String jobName;
16
-	private String jobCron;
17
-	private String jobDesc;
18
-	private String jobClass;
19
 	
16
 	
20
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
17
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
21
-	private String executorHandler;	// 执行器,任务Handler名称
22
 	private String executorParam;	// 执行器,任务参数
18
 	private String executorParam;	// 执行器,任务参数
23
 	
19
 	
24
 	// trigger info
20
 	// trigger info
49
 	public void setJobName(String jobName) {
45
 	public void setJobName(String jobName) {
50
 		this.jobName = jobName;
46
 		this.jobName = jobName;
51
 	}
47
 	}
52
-	public String getJobCron() {
53
-		return jobCron;
54
-	}
55
-	public void setJobCron(String jobCron) {
56
-		this.jobCron = jobCron;
57
-	}
58
-	public String getJobDesc() {
59
-		return jobDesc;
60
-	}
61
-	public void setJobDesc(String jobDesc) {
62
-		this.jobDesc = jobDesc;
63
-	}
64
-	public String getJobClass() {
65
-		return jobClass;
66
-	}
67
-	public void setJobClass(String jobClass) {
68
-		this.jobClass = jobClass;
69
-	}
70
 	public String getExecutorAddress() {
48
 	public String getExecutorAddress() {
71
 		return executorAddress;
49
 		return executorAddress;
72
 	}
50
 	}
73
 	public void setExecutorAddress(String executorAddress) {
51
 	public void setExecutorAddress(String executorAddress) {
74
 		this.executorAddress = executorAddress;
52
 		this.executorAddress = executorAddress;
75
 	}
53
 	}
76
-	public String getExecutorHandler() {
77
-		return executorHandler;
78
-	}
79
-	public void setExecutorHandler(String executorHandler) {
80
-		this.executorHandler = executorHandler;
81
-	}
82
 	public String getExecutorParam() {
54
 	public String getExecutorParam() {
83
 		return executorParam;
55
 		return executorParam;
84
 	}
56
 	}

+ 9 - 22
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java View File

1
 package com.xxl.job.admin.core.thread;
1
 package com.xxl.job.admin.core.thread;
2
 
2
 
3
-import java.text.MessageFormat;
4
-import java.util.concurrent.ConcurrentHashMap;
5
-import java.util.concurrent.ExecutorService;
6
-import java.util.concurrent.Executors;
7
-import java.util.concurrent.LinkedBlockingQueue;
8
-import java.util.concurrent.TimeUnit;
9
-
10
-import org.apache.commons.lang.StringUtils;
11
-import org.slf4j.Logger;
12
-import org.slf4j.LoggerFactory;
13
-
14
 import com.xxl.job.admin.core.model.XxlJobInfo;
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
15
 import com.xxl.job.admin.core.model.XxlJobLog;
4
 import com.xxl.job.admin.core.model.XxlJobLog;
16
 import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
5
 import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
17
 import com.xxl.job.admin.core.util.MailUtil;
6
 import com.xxl.job.admin.core.util.MailUtil;
18
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
7
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
8
+import org.apache.commons.lang.StringUtils;
9
+import org.slf4j.Logger;
10
+import org.slf4j.LoggerFactory;
11
+
12
+import java.text.MessageFormat;
13
+import java.util.concurrent.*;
19
 
14
 
20
 /**
15
 /**
21
  * job monitor helper
16
  * job monitor helper
52
 								// pass
47
 								// pass
53
 							}
48
 							}
54
 							if (RemoteCallBack.FAIL.equals(log.getTriggerStatus()) || RemoteCallBack.FAIL.equals(log.getHandleStatus())) {
49
 							if (RemoteCallBack.FAIL.equals(log.getTriggerStatus()) || RemoteCallBack.FAIL.equals(log.getHandleStatus())) {
55
-								String monotorKey = log.getJobGroup().concat("_").concat(log.getJobName());
56
-								Integer count = countMap.get(monotorKey);
57
-								if (count == null) {
58
-									count = new Integer(0);
59
-								}
60
-								count += 1;
61
-								countMap.put(monotorKey, count);
62
 								XxlJobInfo info = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
50
 								XxlJobInfo info = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
63
-								if (count >= info.getAlarmThreshold()) {
64
-									MailUtil.sendMail(info.getAlarmEmail(), "《调度平台中心-监控报警》", 
65
-											MessageFormat.format("调度任务[{0}]失败报警,连续失败次数:{1}", monotorKey, count), false, null);
66
-									countMap.remove(monotorKey);
51
+								if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
52
+									MailUtil.sendMail(info.getAlarmEmail(), "《调度监控报警-调度平台平台XXL-JOB》",
53
+											MessageFormat.format("任务调度失败, JobKey={0}, 任务描述:{1}.", info.getJobKey(), info.getJobDesc()), false, null);
67
 								}
54
 								}
68
 							}
55
 							}
69
 						}
56
 						}

+ 7 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java View File

8
 import java.util.Map;
8
 import java.util.Map;
9
 import java.util.Set;
9
 import java.util.Set;
10
 
10
 
11
+import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
11
 import org.quartz.CronScheduleBuilder;
12
 import org.quartz.CronScheduleBuilder;
12
 import org.quartz.CronTrigger;
13
 import org.quartz.CronTrigger;
13
 import org.quartz.Job;
14
 import org.quartz.Job;
130
         JobKey jobKey = new JobKey(jobInfo.getJobName(), jobInfo.getJobGroup());
131
         JobKey jobKey = new JobKey(jobInfo.getJobName(), jobInfo.getJobGroup());
131
         try {
132
         try {
132
 			Trigger trigger = scheduler.getTrigger(triggerKey);
133
 			Trigger trigger = scheduler.getTrigger(triggerKey);
133
-			JobDetail jobDetail = scheduler.getJobDetail(jobKey);
134
+
134
 			TriggerState triggerState = scheduler.getTriggerState(triggerKey);
135
 			TriggerState triggerState = scheduler.getTriggerState(triggerKey);
135
 			
136
 			
136
 			// parse params
137
 			// parse params
138
 				String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();
139
 				String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();
139
 				jobInfo.setJobCron(cronExpression);
140
 				jobInfo.setJobCron(cronExpression);
140
 			}
141
 			}
141
-			if (jobDetail!=null) {
142
-				String jobClass = jobDetail.getJobClass().getName();
143
-				jobInfo.setJobClass(jobClass);
144
-			}
142
+
143
+            //JobDetail jobDetail = scheduler.getJobDetail(jobKey);
144
+            //String jobClass = jobDetail.getJobClass().getName();
145
+
145
 			if (triggerState!=null) {
146
 			if (triggerState!=null) {
146
 				jobInfo.setJobStatus(triggerState.name());
147
 				jobInfo.setJobStatus(triggerState.name());
147
 			}
148
 			}
175
         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
176
         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
176
 
177
 
177
         // JobDetail : jobClass
178
         // JobDetail : jobClass
178
-		Class<? extends Job> jobClass_ = null;
179
-		try {
180
-			jobClass_ = (Class<? extends Job>)Class.forName(jobInfo.getJobClass());
181
-		} catch (ClassNotFoundException e) {
182
-			e.printStackTrace();
183
-		}
179
+		Class<? extends Job> jobClass_ = RemoteHttpJobBean.class;   // Class.forName(jobInfo.getJobClass());
184
         
180
         
185
 		JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();
181
 		JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();
186
         /*if (jobInfo.getJobData()!=null) {
182
         /*if (jobInfo.getJobData()!=null) {

+ 2 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java View File

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

+ 2 - 9
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java View File

59
 
59
 
60
 	@Override
60
 	@Override
61
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
61
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
62
-			String executorAddress,	String executorParam,
63
-			String author, String alarmEmail, int alarmThreshold,
62
+			String executorAddress,	String executorParam, String author, String alarmEmail,
64
 			int glueSwitch, String glueSource, String glueRemark) {
63
 			int glueSwitch, String glueSource, String glueRemark) {
65
 		// valid
64
 		// valid
66
 		if (JobGroupEnum.match(jobGroup) == null) {
65
 		if (JobGroupEnum.match(jobGroup) == null) {
81
 		if (StringUtils.isBlank(alarmEmail)) {
80
 		if (StringUtils.isBlank(alarmEmail)) {
82
 			return new ReturnT<String>(500, "请输入“报警邮件”");
81
 			return new ReturnT<String>(500, "请输入“报警邮件”");
83
 		}
82
 		}
84
-		if (alarmThreshold < 0) {
85
-			alarmThreshold = 0;
86
-		}
87
 
83
 
88
 		// generate jobName
84
 		// generate jobName
89
 		String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
85
 		String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
102
 		jobInfo.setJobName(jobName);
98
 		jobInfo.setJobName(jobName);
103
 		jobInfo.setJobCron(jobCron);
99
 		jobInfo.setJobCron(jobCron);
104
 		jobInfo.setJobDesc(jobDesc);
100
 		jobInfo.setJobDesc(jobDesc);
105
-		jobInfo.setJobClass(RemoteHttpJobBean.class.getName());
106
 		jobInfo.setAuthor(author);
101
 		jobInfo.setAuthor(author);
107
 		jobInfo.setAlarmEmail(alarmEmail);
102
 		jobInfo.setAlarmEmail(alarmEmail);
108
-		jobInfo.setAlarmThreshold(alarmThreshold);
109
 		jobInfo.setGlueSwitch(glueSwitch);
103
 		jobInfo.setGlueSwitch(glueSwitch);
110
 		jobInfo.setGlueSource(glueSource);
104
 		jobInfo.setGlueSource(glueSource);
111
 		jobInfo.setGlueRemark(glueRemark);
105
 		jobInfo.setGlueRemark(glueRemark);
131
 	@Override
125
 	@Override
132
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
126
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
133
 			String executorAddress, String executorParam,
127
 			String executorAddress, String executorParam,
134
-			String author, String alarmEmail, int alarmThreshold) {
128
+			String author, String alarmEmail) {
135
 		
129
 		
136
 		// valid
130
 		// valid
137
 		if (JobGroupEnum.match(jobGroup) == null) {
131
 		if (JobGroupEnum.match(jobGroup) == null) {
161
 		jobInfo.setJobCron(jobCron);
155
 		jobInfo.setJobCron(jobCron);
162
 		jobInfo.setAuthor(author);
156
 		jobInfo.setAuthor(author);
163
 		jobInfo.setAlarmEmail(alarmEmail);
157
 		jobInfo.setAlarmEmail(alarmEmail);
164
-		jobInfo.setAlarmThreshold(alarmThreshold);
165
 		jobInfo.setExecutorAddress(executorAddress);
158
 		jobInfo.setExecutorAddress(executorAddress);
166
 		jobInfo.setExecutorParam(executorParam);
159
 		jobInfo.setExecutorParam(executorParam);
167
 		
160
 		

+ 1 - 1
xxl-job-admin/src/main/resources/config.properties View File

4
 mail.username=ovono802302@163.com
4
 mail.username=ovono802302@163.com
5
 mail.password=asdfzxcv
5
 mail.password=asdfzxcv
6
 mail.sendFrom=ovono802302@163.com
6
 mail.sendFrom=ovono802302@163.com
7
-mail.sendNick=《任务调度中心xxl-job
7
+mail.sendNick=《调度平台平台XXL-JOB
8
 
8
 
9
 # for login
9
 # for login
10
 login.username=admin
10
 login.username=admin

+ 1 - 15
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml View File

10
 	    <result column="job_name" property="jobName" />
10
 	    <result column="job_name" property="jobName" />
11
 	    <result column="job_cron" property="jobCron" />
11
 	    <result column="job_cron" property="jobCron" />
12
 	    <result column="job_desc" property="jobDesc" />
12
 	    <result column="job_desc" property="jobDesc" />
13
-	    <result column="job_class" property="jobClass" />
14
 	    
13
 	    
15
 	    <result column="add_time" property="addTime" />
14
 	    <result column="add_time" property="addTime" />
16
 	    <result column="update_time" property="updateTime" />
15
 	    <result column="update_time" property="updateTime" />
17
 	    
16
 	    
18
 	    <result column="author" property="author" />
17
 	    <result column="author" property="author" />
19
 	    <result column="alarm_email" property="alarmEmail" />
18
 	    <result column="alarm_email" property="alarmEmail" />
20
-	    <result column="alarm_threshold" property="alarmThreshold" />
21
 	    
19
 	    
22
 	    <result column="executor_address" property="executorAddress" />
20
 	    <result column="executor_address" property="executorAddress" />
23
-	    <result column="executor_handler" property="executorHandler" />
24
 	    <result column="executor_param" property="executorParam" />
21
 	    <result column="executor_param" property="executorParam" />
25
 	    
22
 	    
26
 	    <result column="glue_switch" property="glueSwitch" />
23
 	    <result column="glue_switch" property="glueSwitch" />
34
 		t.job_name,
31
 		t.job_name,
35
 		t.job_cron,
32
 		t.job_cron,
36
 		t.job_desc,
33
 		t.job_desc,
37
-		t.job_class,
38
 		t.add_time,
34
 		t.add_time,
39
 		t.update_time,
35
 		t.update_time,
40
 		t.author,
36
 		t.author,
41
 		t.alarm_email,
37
 		t.alarm_email,
42
-		t.alarm_threshold,
43
 		t.executor_address,
38
 		t.executor_address,
44
-		t.executor_handler,
45
 		t.executor_param,
39
 		t.executor_param,
46
 		t.glue_switch,
40
 		t.glue_switch,
47
 		t.glue_source,
41
 		t.glue_source,
82
 			job_name,
76
 			job_name,
83
 			job_cron,
77
 			job_cron,
84
 			job_desc,
78
 			job_desc,
85
-			job_class,
86
 			add_time,
79
 			add_time,
87
 			update_time,
80
 			update_time,
88
 			author,
81
 			author,
89
 			alarm_email,
82
 			alarm_email,
90
-			alarm_threshold,
91
 			executor_address,
83
 			executor_address,
92
-			executor_handler,
93
 			executor_param,
84
 			executor_param,
94
 			glue_switch,
85
 			glue_switch,
95
 			glue_source,
86
 			glue_source,
98
 			#{jobGroup}, 
89
 			#{jobGroup}, 
99
 			#{jobName}, 
90
 			#{jobName}, 
100
 			#{jobCron}, 
91
 			#{jobCron}, 
101
-			#{jobDesc}, 
102
-			#{jobClass}, 
92
+			#{jobDesc},
103
 			NOW(),
93
 			NOW(),
104
 			NOW(),
94
 			NOW(),
105
 			#{author},
95
 			#{author},
106
 			#{alarmEmail},
96
 			#{alarmEmail},
107
-			#{alarmThreshold},
108
 			#{executorAddress},
97
 			#{executorAddress},
109
-			#{executorHandler},
110
 			#{executorParam},
98
 			#{executorParam},
111
 			#{glueSwitch},
99
 			#{glueSwitch},
112
 			#{glueSource},
100
 			#{glueSource},
132
 			update_time = NOW(),
120
 			update_time = NOW(),
133
 			author = #{author},
121
 			author = #{author},
134
 			alarm_email = #{alarmEmail},
122
 			alarm_email = #{alarmEmail},
135
-			alarm_threshold = #{alarmThreshold},
136
 			executor_address = #{executorAddress},
123
 			executor_address = #{executorAddress},
137
-			executor_handler = #{executorHandler},
138
 			executor_param = #{executorParam},
124
 			executor_param = #{executorParam},
139
 			glue_switch = #{glueSwitch},
125
 			glue_switch = #{glueSwitch},
140
 			glue_source = #{glueSource},
126
 			glue_source = #{glueSource},

+ 0 - 17
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml View File

8
 	
8
 	
9
 	    <result column="job_group" property="jobGroup" />
9
 	    <result column="job_group" property="jobGroup" />
10
 	    <result column="job_name" property="jobName" />
10
 	    <result column="job_name" property="jobName" />
11
-	    <result column="job_cron" property="jobCron" />
12
-	    <result column="job_desc" property="jobDesc" />
13
-	    <result column="job_class" property="jobClass" />
14
 	    
11
 	    
15
 	    <result column="executor_address" property="executorAddress" />
12
 	    <result column="executor_address" property="executorAddress" />
16
-	    <result column="executor_handler" property="executorHandler" />
17
 	    <result column="executor_param" property="executorParam" />
13
 	    <result column="executor_param" property="executorParam" />
18
 	    
14
 	    
19
 	    <result column="trigger_time" property="triggerTime" />
15
 	    <result column="trigger_time" property="triggerTime" />
30
 		t.id,
26
 		t.id,
31
 		t.job_group,
27
 		t.job_group,
32
 		t.job_name,
28
 		t.job_name,
33
-		t.job_cron,
34
-		t.job_desc,
35
-		t.job_class,
36
 		t.executor_address,
29
 		t.executor_address,
37
-		t.executor_handler,
38
 		t.executor_param,
30
 		t.executor_param,
39
 		t.trigger_time,
31
 		t.trigger_time,
40
 		t.trigger_status,
32
 		t.trigger_status,
101
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
93
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
102
 			`job_group`,
94
 			`job_group`,
103
 			`job_name`,
95
 			`job_name`,
104
-			`job_cron`, 
105
-			`job_desc`,
106
-			`job_class`, 
107
 			`executor_address`,
96
 			`executor_address`,
108
-			`executor_handler`,
109
 			`executor_param`
97
 			`executor_param`
110
 		) VALUES (
98
 		) VALUES (
111
 			#{jobGroup}, 
99
 			#{jobGroup}, 
112
 			#{jobName},
100
 			#{jobName},
113
-			#{jobCron},
114
-			#{jobDesc},
115
-			#{jobClass},
116
 			#{executorAddress},
101
 			#{executorAddress},
117
-			#{executorHandler},
118
 			#{executorParam}
102
 			#{executorParam}
119
 		);
103
 		);
120
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
104
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
129
 			`trigger_status`= #{triggerStatus}, 
113
 			`trigger_status`= #{triggerStatus}, 
130
 			`trigger_msg`= #{triggerMsg},
114
 			`trigger_msg`= #{triggerMsg},
131
 			`executor_address`= #{executorAddress},
115
 			`executor_address`= #{executorAddress},
132
-			`executor_handler`= #{executorHandler},
133
 			`executor_param`= #{executorParam}
116
 			`executor_param`= #{executorParam}
134
 		WHERE `id`= #{id}
117
 		WHERE `id`= #{id}
135
 	</update>
118
 	</update>

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

38
 	    <section class="content">
38
 	    <section class="content">
39
 	    
39
 	    
40
 	    	<div class="row">
40
 	    	<div class="row">
41
-	    		<div class="col-xs-4">
41
+	    		<div class="col-xs-2">
42
 	              	<div class="input-group">
42
 	              	<div class="input-group">
43
 	                	<span class="input-group-addon">分组</span>
43
 	                	<span class="input-group-addon">分组</span>
44
                 		<select class="form-control" id="jobGroup" >
44
                 		<select class="form-control" id="jobGroup" >
48
 	                  	</select>
48
 	                  	</select>
49
 	              	</div>
49
 	              	</div>
50
 	            </div>
50
 	            </div>
51
-	            <div class="col-xs-4">
51
+                <div class="col-xs-3">
52
+                    <div class="input-group">
53
+                        <span class="input-group-addon">JobKey</span>
54
+                        <input type="text" class="form-control" id="JobKey" value="${jobName}" autocomplete="on" >
55
+                    </div>
56
+                </div>
57
+	            <div class="col-xs-3">
52
 	              	<div class="input-group">
58
 	              	<div class="input-group">
53
-	                	<span class="input-group-addon">名称</span>
59
+	                	<span class="input-group-addon">描述</span>
54
 	                	<input type="text" class="form-control" id="jobDesc" value="${jobName}" autocomplete="on" >
60
 	                	<input type="text" class="form-control" id="jobDesc" value="${jobName}" autocomplete="on" >
55
 	              	</div>
61
 	              	</div>
56
 	            </div>
62
 	            </div>
75
 					            		<th name="id" >id</th>
81
 					            		<th name="id" >id</th>
76
 					                	<th name="jobGroup" >jobGroup</th>
82
 					                	<th name="jobGroup" >jobGroup</th>
77
 					                  	<th name="jobName" >jobName</th>
83
 					                  	<th name="jobName" >jobName</th>
78
-					                  	<th name="jobDesc" >名称</th>
84
+                                        <th name="JobKey" >JobKey</th>
85
+					                  	<th name="jobDesc" >描述</th>
79
 					                  	<th name="jobCron" >Cron</th>
86
 					                  	<th name="jobCron" >Cron</th>
80
-					                  	<th name="jobClass" >JobBean</th>
81
 					                  	<th name="executorAddress" >执行器地址</th>
87
 					                  	<th name="executorAddress" >执行器地址</th>
82
 					                  	<th name="executorParam" >任务参数</th>
88
 					                  	<th name="executorParam" >任务参数</th>
83
 					                  	<th name="addTime" >新增时间</th>
89
 					                  	<th name="addTime" >新增时间</th>
84
 					                  	<th name="updateTime" >更新时间</th>
90
 					                  	<th name="updateTime" >更新时间</th>
85
 					                  	<th name="author" >负责人</th>
91
 					                  	<th name="author" >负责人</th>
86
 					                  	<th name="alarmEmail" >报警邮件</th>
92
 					                  	<th name="alarmEmail" >报警邮件</th>
87
-					                  	<th name="alarmThreshold" >报警阀值</th>
88
 					                  	<th name="glueSwitch" >GLUE模式</th>
93
 					                  	<th name="glueSwitch" >GLUE模式</th>
89
 					                  	<th name="jobStatus" >状态</th>
94
 					                  	<th name="jobStatus" >状态</th>
90
 					                  	<th>操作</th>
95
 					                  	<th>操作</th>
122
 		            			</#list>
127
 		            			</#list>
123
 		                  	</select>
128
 		                  	</select>
124
 						</div>
129
 						</div>
125
-                        <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
130
+                        <label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
126
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
131
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
127
 					</div>
132
 					</div>
128
 					<div class="form-group">
133
 					<div class="form-group">
134
 					<div class="form-group">
139
 					<div class="form-group">
135
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
140
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
136
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
141
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
137
-                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
138
-                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
139
-					</div>
140
-					<div class="form-group">
141
-						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
142
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
143
-						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
144
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
145
-					</div>
146
-                    <div class="form-group">
147
                         <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
142
                         <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
148
                         <div class="col-sm-4">
143
                         <div class="col-sm-4">
149
                             <select class="form-control" name="glueSwitch" >
144
                             <select class="form-control" name="glueSwitch" >
151
                                 <option value="1" >GLUE模式</option>
146
                                 <option value="1" >GLUE模式</option>
152
                             </select>
147
                             </select>
153
                         </div>
148
                         </div>
154
-                    </div>
149
+					</div>
150
+					<div class="form-group">
151
+						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
152
+						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
153
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
154
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
155
+					</div>
155
                     <hr>
156
                     <hr>
156
 					<div class="form-group">
157
 					<div class="form-group">
157
 						<div class="col-sm-offset-3 col-sm-6">
158
 						<div class="col-sm-offset-3 col-sm-6">
202
                         <div class="col-sm-4">
203
                         <div class="col-sm-4">
203
 							<input type="text" class="form-control jobGroupTitle" maxlength="50" readonly >
204
 							<input type="text" class="form-control jobGroupTitle" maxlength="50" readonly >
204
 						</div>
205
 						</div>
205
-                        <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
206
+                        <label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
206
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
207
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
207
 					</div>
208
 					</div>
208
 					<div class="form-group">
209
 					<div class="form-group">
215
 					<div class="form-group">
216
 					<div class="form-group">
216
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
217
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
217
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
218
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
218
-                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
219
-                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
219
+                        <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
220
+                        <div class="col-sm-4">
221
+                            <input type="text" class="form-control glueSwitchTitle" readonly >
222
+                        </div>
220
 					</div>
223
 					</div>
221
 					<div class="form-group">
224
 					<div class="form-group">
222
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
225
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
223
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
226
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
224
-						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
225
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
227
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
228
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
226
 					</div>
229
 					</div>
227
-                    <div class="form-group">
228
-                        <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
229
-                        <div class="col-sm-4">
230
-							<input type="text" class="form-control glueSwitchTitle" readonly >
231
-						</div>
232
-                    </div>
233
 					<hr>
230
 					<hr>
234
 					<div class="form-group">
231
 					<div class="form-group">
235
 						<div class="col-sm-offset-3 col-sm-3">
232
 						<div class="col-sm-offset-3 col-sm-3">

+ 0 - 4
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl View File

78
 					                	<th name="id" >id</th>
78
 					                	<th name="id" >id</th>
79
 					                	<th name="jobGroup" >任务组</th>
79
 					                	<th name="jobGroup" >任务组</th>
80
 					                  	<th name="jobName" >任务名</th>
80
 					                  	<th name="jobName" >任务名</th>
81
-					                  	<th name="jobCron" >Cron</th>
82
-					                  	<th name="jobDesc" >描述</th>
83
-					                  	<th name="jobClass" >JobBean</th>
84
 					                  	<th name="executorAddress" >执行器地址</th>
81
 					                  	<th name="executorAddress" >执行器地址</th>
85
-					                  	<th name="executorHandler" >JobHandler</th>
86
 					                  	<th name="executorParam" >任务参数</th>
82
 					                  	<th name="executorParam" >任务参数</th>
87
 					                  	<th name="triggerTime" >调度时间</th>
83
 					                  	<th name="triggerTime" >调度时间</th>
88
 					                  	<th name="triggerStatus" >调度结果</th>
84
 					                  	<th name="triggerStatus" >调度结果</th>

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

34
 	            			return data;
34
 	            			return data;
35
 	            		}
35
 	            		}
36
             		},
36
             		},
37
-	                { "data": 'jobName', "visible" : false},
37
+					{ "data": 'jobName', "visible" : false},
38
+					{ "data": 'jobKey', "visible" : true},
38
 	                { "data": 'jobDesc', "visible" : true},
39
 	                { "data": 'jobDesc', "visible" : true},
39
 	                { "data": 'jobCron', "visible" : true},
40
 	                { "data": 'jobCron', "visible" : true},
40
-	                { "data": 'jobClass', "visible" : false},
41
 	                { "data": 'executorAddress', "visible" : false},
41
 	                { "data": 'executorAddress', "visible" : false},
42
 	                { "data": 'executorParam', "visible" : false},
42
 	                { "data": 'executorParam', "visible" : false},
43
 	                { 
43
 	                { 
56
 	                },
56
 	                },
57
 	                { "data": 'author', "visible" : true},
57
 	                { "data": 'author', "visible" : true},
58
 	                { "data": 'alarmEmail', "visible" : false},
58
 	                { "data": 'alarmEmail', "visible" : false},
59
-	                { "data": 'alarmThreshold', "visible" : false},
60
 	                { "data": 'glueSwitch', "visible" : false},
59
 	                { "data": 'glueSwitch', "visible" : false},
61
 	                { 
60
 	                { 
62
 	                	"data": 'jobStatus', 
61
 	                	"data": 'jobStatus', 
95
 	                			var html = '<p id="'+ row.id +'" '+
94
 	                			var html = '<p id="'+ row.id +'" '+
96
 	                							' jobGroup="'+ row.jobGroup +'" '+
95
 	                							' jobGroup="'+ row.jobGroup +'" '+
97
 	                							' jobName="'+ row.jobName +'" '+
96
 	                							' jobName="'+ row.jobName +'" '+
97
+												' jobKey="'+ row.jobKey +'" '+
98
 	                							' jobCron="'+ row.jobCron +'" '+
98
 	                							' jobCron="'+ row.jobCron +'" '+
99
 	                							' jobDesc="'+ row.jobDesc +'" '+
99
 	                							' jobDesc="'+ row.jobDesc +'" '+
100
-	                							' jobClass="'+ row.jobClass +'" '+
101
 	                							' executorAddress="'+row.executorAddress +'" '+
100
 	                							' executorAddress="'+row.executorAddress +'" '+
102
 	                							' executorParam="'+ row.executorParam +'" '+
101
 	                							' executorParam="'+ row.executorParam +'" '+
103
 	                							' author="'+ row.author +'" '+
102
 	                							' author="'+ row.author +'" '+
104
 	                							' alarmEmail="'+ row.alarmEmail +'" '+
103
 	                							' alarmEmail="'+ row.alarmEmail +'" '+
105
-	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
106
 	                							' glueSwitch="'+ row.glueSwitch +'" '+
104
 	                							' glueSwitch="'+ row.glueSwitch +'" '+
107
 	                							'>'+
105
 	                							'>'+
108
 										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
106
 										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
226
             alarmEmail : {
224
             alarmEmail : {
227
             	required : true
225
             	required : true
228
             },
226
             },
229
-            alarmThreshold : {
230
-            	required : true ,
231
-            	digits:true
232
-            },
233
 			author : {
227
 			author : {
234
 				required : true
228
 				required : true
235
 			}
229
 			}
236
         }, 
230
         }, 
237
         messages : {  
231
         messages : {  
238
             jobDesc : {
232
             jobDesc : {
239
-            	required :"请输入“名称”."
233
+            	required :"请输入“描述”."
240
             },
234
             },
241
             jobCron : {
235
             jobCron : {
242
             	required :"请输入“Cron”."
236
             	required :"请输入“Cron”."
247
             alarmEmail : {
241
             alarmEmail : {
248
             	required : "请输入“报警邮件”."
242
             	required : "请输入“报警邮件”."
249
             },
243
             },
250
-            alarmThreshold : {
251
-            	required : "请输入“报警阈值”."  ,
252
-            	digits:"阀值应该为整数."
253
-            },
254
             author : {
244
             author : {
255
             	required : "请输入“负责人”."
245
             	required : "请输入“负责人”."
256
             }
246
             }
294
 		// base data
284
 		// base data
295
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
285
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
296
 		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
286
 		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
287
+		$("#updateModal .form .jobKey").val( $(this).parent('p').attr("jobKey") );
297
 		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
288
 		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
298
 		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
289
 		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
299
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
290
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
300
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
291
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
301
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
292
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
302
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
293
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
303
-		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
304
 
294
 
305
 		// jobGroupTitle
295
 		// jobGroupTitle
306
 		var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
296
 		var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
307
 		$("#updateModal .form .jobGroupTitle").val(jobGroupTitle);
297
 		$("#updateModal .form .jobGroupTitle").val(jobGroupTitle);
308
 
298
 
309
-        // jobKey
310
-        var jobKey = $(this).parent('p').attr("jobGroup") + "_" + $(this).parent('p').attr("jobName");
311
-        $("#updateModal .form .jobKey").val(jobKey);
312
-
313
         // glueSwitchTitle
299
         // glueSwitchTitle
314
 		$("#updateModal .form .glueSwitchTitle").val( ($(this).parent('p').attr("glueSwitch") == 0)?"BEAN模式":"GLUE模式" );
300
 		$("#updateModal .form .glueSwitchTitle").val( ($(this).parent('p').attr("glueSwitch") == 0)?"BEAN模式":"GLUE模式" );
315
 
301
 
316
-
317
 		// show
302
 		// show
318
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
303
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
319
 	});
304
 	});
336
 			alarmEmail : {
321
 			alarmEmail : {
337
 				required : true
322
 				required : true
338
 			},
323
 			},
339
-			alarmThreshold : {
340
-				required : true ,
341
-				digits:true
342
-			},
343
 			author : {
324
 			author : {
344
 				required : true
325
 				required : true
345
 			}
326
 			}
346
 		},
327
 		},
347
 		messages : {
328
 		messages : {
348
 			jobDesc : {
329
 			jobDesc : {
349
-				required :"请输入“名称”."
330
+				required :"请输入“描述”."
350
 			},
331
 			},
351
 			jobCron : {
332
 			jobCron : {
352
 				required :"请输入“Cron”."
333
 				required :"请输入“Cron”."
357
 			alarmEmail : {
338
 			alarmEmail : {
358
 				required : "请输入“报警邮件”."
339
 				required : "请输入“报警邮件”."
359
 			},
340
 			},
360
-			alarmThreshold : {
361
-				required : "请输入“报警阈值”."  ,
362
-				digits:"阀值应该为整数."
363
-			},
364
 			author : {
341
 			author : {
365
 				required : "请输入“负责人”."
342
 				required : "请输入“负责人”."
366
 			}
343
 			}

+ 0 - 5
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js View File

96
 	            		}
96
 	            		}
97
             		},
97
             		},
98
 	                { "data": 'jobName', "visible" : false},
98
 	                { "data": 'jobName', "visible" : false},
99
-	                { "data": 'jobCron', "visible" : false},
100
-	                { "data": 'jobDesc', "visible" : false},
101
-	                { "data": 'jobClass', "visible" : false},
102
-	                
103
 	                { "data": 'executorAddress', "visible" : true},
99
 	                { "data": 'executorAddress', "visible" : true},
104
-	                { "data": 'executorHandler', "visible" : true},
105
 	                { "data": 'executorParam', "visible" : true},
100
 	                { "data": 'executorParam', "visible" : true},
106
 	                { 
101
 	                { 
107
 	                	"data": 'triggerTime', 
102
 	                	"data": 'triggerTime', 

+ 0 - 1
xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java View File

33
 		XxlJobInfo info = new XxlJobInfo();
33
 		XxlJobInfo info = new XxlJobInfo();
34
 		info.setJobName("job_name");
34
 		info.setJobName("job_name");
35
 		info.setJobCron("jobCron");
35
 		info.setJobCron("jobCron");
36
-		info.setJobClass("jobClass");
37
 		int count = xxlJobInfoDao.save(info);
36
 		int count = xxlJobInfoDao.save(info);
38
 		System.out.println(count);
37
 		System.out.println(count);
39
 		System.out.println(info.getId());
38
 		System.out.println(info.getId());

+ 0 - 2
xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobLogTest.java View File

26
 	public void save_load(){
26
 	public void save_load(){
27
 		XxlJobLog xxlJobLog = new XxlJobLog();
27
 		XxlJobLog xxlJobLog = new XxlJobLog();
28
 		xxlJobLog.setJobName("job_name");
28
 		xxlJobLog.setJobName("job_name");
29
-		xxlJobLog.setJobCron("jobCron");
30
-		xxlJobLog.setJobClass("jobClass");
31
 		int count = xxlJobLogDao.save(xxlJobLog);
29
 		int count = xxlJobLogDao.save(xxlJobLog);
32
 		System.out.println(count);
30
 		System.out.println(count);
33
 		System.out.println(xxlJobLog.getId());
31
 		System.out.println(xxlJobLog.getId());

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

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_201607192256270689,defaults_201607192256270689")
23
+@JobHander(value="waimai_201607202316260736,waimai_201607202316260736")
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);