Explorar o código

重要重构;
1、优化调度Info表字段;
2、优化调度Log表字段;
3、优化"新增/更新任务"界面交互体验;

xueli.xue %!s(int64=8) %!d(string=hai) anos
pai
achega
9591be6b13
Modificáronse 19 ficheiros con 85 adicións e 243 borrados
  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

@@ -145,20 +145,17 @@ CREATE TABLE XXL_JOB_QRTZ_LOCKS
 
 
 
-CREATE TABLE XXL_JOB_QRTZ_TRIGGER_INFO (
+CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
   `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
   `job_desc` varchar(255) NOT NULL,
-  `job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
   `add_time` datetime DEFAULT NULL,
   `update_time` datetime DEFAULT NULL,
   `author` varchar(64) DEFAULT NULL COMMENT '作者',
   `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
-  `alarm_threshold` int(11) DEFAULT NULL COMMENT '报警阀值(连续失败次数)',
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,有多个则逗号分隔',
-  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
   `executor_param` varchar(255) DEFAULT NULL COMMENT '执行器任务参数',
   `glue_switch` int(11) DEFAULT '0' COMMENT 'GLUE模式开关:0-否,1-是',
   `glue_source` text COMMENT 'GLUE源代码',
@@ -166,15 +163,12 @@ CREATE TABLE XXL_JOB_QRTZ_TRIGGER_INFO (
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
-CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOG (
+
+CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
-  `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON表达式',
-  `job_desc` varchar(255) NOT NULL,
-  `job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
-  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
   `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
   `trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',

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

@@ -40,23 +40,20 @@ public class JobInfoController {
 	
 	@RequestMapping("/add")
 	@ResponseBody
-	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
-			String executorAddress, String executorParam,
-			String author, String alarmEmail, int alarmThreshold, 
+	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
+			String executorAddress, String executorParam, String author, String alarmEmail,
 			int glueSwitch, String glueSource, String glueRemark) {
 		
 		return xxlJobService.add(jobGroup, jobCron, jobDesc, executorAddress, executorParam,
-				author, alarmEmail, alarmThreshold, glueSwitch, glueSource, glueRemark);
+				author, alarmEmail, glueSwitch, glueSource, glueRemark);
 	}
 	
 	@RequestMapping("/reschedule")
 	@ResponseBody
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
-			String executorAddress, String executorParam,
-			String author, String alarmEmail, int alarmThreshold) {
+			String executorAddress, String executorParam, String author, String alarmEmail) {
 
-		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorParam, author,
-				alarmEmail, alarmThreshold);
+		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorParam, author, alarmEmail);
 	}
 	
 	@RequestMapping("/remove")

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

@@ -1,20 +1,5 @@
 package com.xxl.job.admin.core.jobbean;
 
-import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.quartz.JobKey;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.scheduling.quartz.QuartzJobBean;
-
 import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
 import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.model.XxlJobLog;
@@ -24,6 +9,16 @@ import com.xxl.job.core.handler.HandlerRepository.ActionEnum;
 import com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum;
 import com.xxl.job.core.util.HttpUtil;
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
+import org.apache.commons.lang.StringUtils;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.JobKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.text.MessageFormat;
+import java.util.*;
 
 /**
  * http job bean
@@ -44,9 +39,6 @@ public class RemoteHttpJobBean extends QuartzJobBean {
 		XxlJobLog jobLog = new XxlJobLog();
 		jobLog.setJobGroup(jobInfo.getJobGroup());
 		jobLog.setJobName(jobInfo.getJobName());
-		jobLog.setJobCron(jobInfo.getJobCron());
-		jobLog.setJobDesc(jobInfo.getJobDesc());
-		jobLog.setJobClass(jobInfo.getJobClass());
 		DynamicSchedulerUtil.xxlJobLogDao.save(jobLog);
 		logger.info(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
 		
@@ -66,7 +58,6 @@ public class RemoteHttpJobBean extends QuartzJobBean {
 
 		// failover trigger
 		RemoteCallBack callback = failoverTrigger(jobInfo.getExecutorAddress(), params, jobLog);
-		jobLog.setExecutorHandler(jobInfo.getGlueSwitch()==0?jobInfo.getExecutorHandler():"GLUE任务");
 		jobLog.setExecutorParam(jobInfo.getExecutorParam());
 		logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, callback:{}", jobLog.getId(), callback);
 		

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

@@ -14,18 +14,14 @@ public class XxlJobInfo {
 	private String jobName;		// 任务名
 	private String jobCron;		// 任务执行CRON表达式 【base on quartz】
 	private String jobDesc;
-	private String jobClass;	// 任务执行JobBean 【base on quartz】
-	//private String jobData;		// 任务执行数据 Map-JSON-String
 	
 	private Date addTime;
 	private Date updateTime;
 	
 	private String author;		// 负责人
 	private String alarmEmail;	// 报警邮件
-	private int alarmThreshold;	// 报警阀值
 	
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
-	private String executorHandler;	// 执行器,任务Handler名称
 	private String executorParam;	// 执行器,任务参数
 	
 	private int glueSwitch;		// GLUE模式开关:0-否,1-是
@@ -35,6 +31,9 @@ public class XxlJobInfo {
 	// copy from quartz
 	private String jobStatus;	// 任务状态 【base on quartz】
 
+	// generate job key
+	private String jobKey;
+
 	public int getId() {
 		return id;
 	}
@@ -75,14 +74,6 @@ public class XxlJobInfo {
 		this.jobDesc = jobDesc;
 	}
 
-	public String getJobClass() {
-		return jobClass;
-	}
-
-	public void setJobClass(String jobClass) {
-		this.jobClass = jobClass;
-	}
-
 	public Date getAddTime() {
 		return addTime;
 	}
@@ -115,14 +106,6 @@ public class XxlJobInfo {
 		this.alarmEmail = alarmEmail;
 	}
 
-	public int getAlarmThreshold() {
-		return alarmThreshold;
-	}
-
-	public void setAlarmThreshold(int alarmThreshold) {
-		this.alarmThreshold = alarmThreshold;
-	}
-
 	public String getExecutorAddress() {
 		return executorAddress;
 	}
@@ -131,14 +114,6 @@ public class XxlJobInfo {
 		this.executorAddress = executorAddress;
 	}
 
-	public String getExecutorHandler() {
-		return executorHandler;
-	}
-
-	public void setExecutorHandler(String executorHandler) {
-		this.executorHandler = executorHandler;
-	}
-
 	public String getExecutorParam() {
 		return executorParam;
 	}
@@ -178,5 +153,13 @@ public class XxlJobInfo {
 	public void setJobStatus(String jobStatus) {
 		this.jobStatus = jobStatus;
 	}
-	
+
+	public String getJobKey() {
+		return jobGroup.concat("_").concat(jobName);
+	}
+
+	public void setJobKey(String jobKey) {
+		this.jobKey = jobKey;
+	}
+
 }

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

@@ -13,12 +13,8 @@ public class XxlJobLog {
 	// job info
 	private String jobGroup;
 	private String jobName;
-	private String jobCron;
-	private String jobDesc;
-	private String jobClass;
 	
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
-	private String executorHandler;	// 执行器,任务Handler名称
 	private String executorParam;	// 执行器,任务参数
 	
 	// trigger info
@@ -49,36 +45,12 @@ public class XxlJobLog {
 	public void setJobName(String jobName) {
 		this.jobName = jobName;
 	}
-	public String getJobCron() {
-		return jobCron;
-	}
-	public void setJobCron(String jobCron) {
-		this.jobCron = jobCron;
-	}
-	public String getJobDesc() {
-		return jobDesc;
-	}
-	public void setJobDesc(String jobDesc) {
-		this.jobDesc = jobDesc;
-	}
-	public String getJobClass() {
-		return jobClass;
-	}
-	public void setJobClass(String jobClass) {
-		this.jobClass = jobClass;
-	}
 	public String getExecutorAddress() {
 		return executorAddress;
 	}
 	public void setExecutorAddress(String executorAddress) {
 		this.executorAddress = executorAddress;
 	}
-	public String getExecutorHandler() {
-		return executorHandler;
-	}
-	public void setExecutorHandler(String executorHandler) {
-		this.executorHandler = executorHandler;
-	}
 	public String getExecutorParam() {
 		return executorParam;
 	}

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

@@ -1,21 +1,16 @@
 package com.xxl.job.admin.core.thread;
 
-import java.text.MessageFormat;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.model.XxlJobLog;
 import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
 import com.xxl.job.admin.core.util.MailUtil;
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.MessageFormat;
+import java.util.concurrent.*;
 
 /**
  * job monitor helper
@@ -52,18 +47,10 @@ public class JobMonitorHelper {
 								// pass
 							}
 							if (RemoteCallBack.FAIL.equals(log.getTriggerStatus()) || RemoteCallBack.FAIL.equals(log.getHandleStatus())) {
-								String monotorKey = log.getJobGroup().concat("_").concat(log.getJobName());
-								Integer count = countMap.get(monotorKey);
-								if (count == null) {
-									count = new Integer(0);
-								}
-								count += 1;
-								countMap.put(monotorKey, count);
 								XxlJobInfo info = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
-								if (count >= info.getAlarmThreshold()) {
-									MailUtil.sendMail(info.getAlarmEmail(), "《调度平台中心-监控报警》", 
-											MessageFormat.format("调度任务[{0}]失败报警,连续失败次数:{1}", monotorKey, count), false, null);
-									countMap.remove(monotorKey);
+								if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
+									MailUtil.sendMail(info.getAlarmEmail(), "《调度监控报警-调度平台平台XXL-JOB》",
+											MessageFormat.format("任务调度失败, JobKey={0}, 任务描述:{1}.", info.getJobKey(), info.getJobDesc()), false, null);
 								}
 							}
 						}

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

@@ -8,6 +8,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
 import org.quartz.CronScheduleBuilder;
 import org.quartz.CronTrigger;
 import org.quartz.Job;
@@ -130,7 +131,7 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
         JobKey jobKey = new JobKey(jobInfo.getJobName(), jobInfo.getJobGroup());
         try {
 			Trigger trigger = scheduler.getTrigger(triggerKey);
-			JobDetail jobDetail = scheduler.getJobDetail(jobKey);
+
 			TriggerState triggerState = scheduler.getTriggerState(triggerKey);
 			
 			// parse params
@@ -138,10 +139,10 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
 				String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();
 				jobInfo.setJobCron(cronExpression);
 			}
-			if (jobDetail!=null) {
-				String jobClass = jobDetail.getJobClass().getName();
-				jobInfo.setJobClass(jobClass);
-			}
+
+            //JobDetail jobDetail = scheduler.getJobDetail(jobKey);
+            //String jobClass = jobDetail.getJobClass().getName();
+
 			if (triggerState!=null) {
 				jobInfo.setJobStatus(triggerState.name());
 			}
@@ -175,12 +176,7 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
 
         // JobDetail : jobClass
-		Class<? extends Job> jobClass_ = null;
-		try {
-			jobClass_ = (Class<? extends Job>)Class.forName(jobInfo.getJobClass());
-		} catch (ClassNotFoundException e) {
-			e.printStackTrace();
-		}
+		Class<? extends Job> jobClass_ = RemoteHttpJobBean.class;   // Class.forName(jobInfo.getJobClass());
         
 		JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();
         /*if (jobInfo.getJobData()!=null) {

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

@@ -14,13 +14,11 @@ public interface IXxlJobService {
 	public Map<String, Object> pageList(int start, int length, String jobGroup, String jobDesc, String filterTime);
 	
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
-			String executorAddress,	String executorParam,
-			String author, String alarmEmail, int alarmThreshold,
+			String executorAddress,	String executorParam, String author, String alarmEmail,
 			int glueSwitch, String glueSource, String glueRemark);
 	
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
-			String handler_address, String handler_params,
-			String author, String alarmEmail, int alarmThreshold);
+			String handler_address, String handler_params, String author, String alarmEmail);
 	
 	public ReturnT<String> remove(String jobGroup, String jobName);
 	

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

@@ -59,8 +59,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
 
 	@Override
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
-			String executorAddress,	String executorParam,
-			String author, String alarmEmail, int alarmThreshold,
+			String executorAddress,	String executorParam, String author, String alarmEmail,
 			int glueSwitch, String glueSource, String glueRemark) {
 		// valid
 		if (JobGroupEnum.match(jobGroup) == null) {
@@ -81,9 +80,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
 		if (StringUtils.isBlank(alarmEmail)) {
 			return new ReturnT<String>(500, "请输入“报警邮件”");
 		}
-		if (alarmThreshold < 0) {
-			alarmThreshold = 0;
-		}
 
 		// generate jobName
 		String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
@@ -102,10 +98,8 @@ public class XxlJobServiceImpl implements IXxlJobService {
 		jobInfo.setJobName(jobName);
 		jobInfo.setJobCron(jobCron);
 		jobInfo.setJobDesc(jobDesc);
-		jobInfo.setJobClass(RemoteHttpJobBean.class.getName());
 		jobInfo.setAuthor(author);
 		jobInfo.setAlarmEmail(alarmEmail);
-		jobInfo.setAlarmThreshold(alarmThreshold);
 		jobInfo.setGlueSwitch(glueSwitch);
 		jobInfo.setGlueSource(glueSource);
 		jobInfo.setGlueRemark(glueRemark);
@@ -131,7 +125,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
 	@Override
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
 			String executorAddress, String executorParam,
-			String author, String alarmEmail, int alarmThreshold) {
+			String author, String alarmEmail) {
 		
 		// valid
 		if (JobGroupEnum.match(jobGroup) == null) {
@@ -161,7 +155,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
 		jobInfo.setJobCron(jobCron);
 		jobInfo.setAuthor(author);
 		jobInfo.setAlarmEmail(alarmEmail);
-		jobInfo.setAlarmThreshold(alarmThreshold);
 		jobInfo.setExecutorAddress(executorAddress);
 		jobInfo.setExecutorParam(executorParam);
 		

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

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

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

@@ -10,17 +10,14 @@
 	    <result column="job_name" property="jobName" />
 	    <result column="job_cron" property="jobCron" />
 	    <result column="job_desc" property="jobDesc" />
-	    <result column="job_class" property="jobClass" />
 	    
 	    <result column="add_time" property="addTime" />
 	    <result column="update_time" property="updateTime" />
 	    
 	    <result column="author" property="author" />
 	    <result column="alarm_email" property="alarmEmail" />
-	    <result column="alarm_threshold" property="alarmThreshold" />
 	    
 	    <result column="executor_address" property="executorAddress" />
-	    <result column="executor_handler" property="executorHandler" />
 	    <result column="executor_param" property="executorParam" />
 	    
 	    <result column="glue_switch" property="glueSwitch" />
@@ -34,14 +31,11 @@
 		t.job_name,
 		t.job_cron,
 		t.job_desc,
-		t.job_class,
 		t.add_time,
 		t.update_time,
 		t.author,
 		t.alarm_email,
-		t.alarm_threshold,
 		t.executor_address,
-		t.executor_handler,
 		t.executor_param,
 		t.glue_switch,
 		t.glue_source,
@@ -82,14 +76,11 @@
 			job_name,
 			job_cron,
 			job_desc,
-			job_class,
 			add_time,
 			update_time,
 			author,
 			alarm_email,
-			alarm_threshold,
 			executor_address,
-			executor_handler,
 			executor_param,
 			glue_switch,
 			glue_source,
@@ -98,15 +89,12 @@
 			#{jobGroup}, 
 			#{jobName}, 
 			#{jobCron}, 
-			#{jobDesc}, 
-			#{jobClass}, 
+			#{jobDesc},
 			NOW(),
 			NOW(),
 			#{author},
 			#{alarmEmail},
-			#{alarmThreshold},
 			#{executorAddress},
-			#{executorHandler},
 			#{executorParam},
 			#{glueSwitch},
 			#{glueSource},
@@ -132,9 +120,7 @@
 			update_time = NOW(),
 			author = #{author},
 			alarm_email = #{alarmEmail},
-			alarm_threshold = #{alarmThreshold},
 			executor_address = #{executorAddress},
-			executor_handler = #{executorHandler},
 			executor_param = #{executorParam},
 			glue_switch = #{glueSwitch},
 			glue_source = #{glueSource},

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

@@ -8,12 +8,8 @@
 	
 	    <result column="job_group" property="jobGroup" />
 	    <result column="job_name" property="jobName" />
-	    <result column="job_cron" property="jobCron" />
-	    <result column="job_desc" property="jobDesc" />
-	    <result column="job_class" property="jobClass" />
 	    
 	    <result column="executor_address" property="executorAddress" />
-	    <result column="executor_handler" property="executorHandler" />
 	    <result column="executor_param" property="executorParam" />
 	    
 	    <result column="trigger_time" property="triggerTime" />
@@ -30,11 +26,7 @@
 		t.id,
 		t.job_group,
 		t.job_name,
-		t.job_cron,
-		t.job_desc,
-		t.job_class,
 		t.executor_address,
-		t.executor_handler,
 		t.executor_param,
 		t.trigger_time,
 		t.trigger_status,
@@ -101,20 +93,12 @@
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
 			`job_group`,
 			`job_name`,
-			`job_cron`, 
-			`job_desc`,
-			`job_class`, 
 			`executor_address`,
-			`executor_handler`,
 			`executor_param`
 		) VALUES (
 			#{jobGroup}, 
 			#{jobName},
-			#{jobCron},
-			#{jobDesc},
-			#{jobClass},
 			#{executorAddress},
-			#{executorHandler},
 			#{executorParam}
 		);
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
@@ -129,7 +113,6 @@
 			`trigger_status`= #{triggerStatus}, 
 			`trigger_msg`= #{triggerMsg},
 			`executor_address`= #{executorAddress},
-			`executor_handler`= #{executorHandler},
 			`executor_param`= #{executorParam}
 		WHERE `id`= #{id}
 	</update>

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

@@ -38,7 +38,7 @@
 	    <section class="content">
 	    
 	    	<div class="row">
-	    		<div class="col-xs-4">
+	    		<div class="col-xs-2">
 	              	<div class="input-group">
 	                	<span class="input-group-addon">分组</span>
                 		<select class="form-control" id="jobGroup" >
@@ -48,9 +48,15 @@
 	                  	</select>
 	              	</div>
 	            </div>
-	            <div class="col-xs-4">
+                <div class="col-xs-3">
+                    <div class="input-group">
+                        <span class="input-group-addon">JobKey</span>
+                        <input type="text" class="form-control" id="JobKey" value="${jobName}" autocomplete="on" >
+                    </div>
+                </div>
+	            <div class="col-xs-3">
 	              	<div class="input-group">
-	                	<span class="input-group-addon">名称</span>
+	                	<span class="input-group-addon">描述</span>
 	                	<input type="text" class="form-control" id="jobDesc" value="${jobName}" autocomplete="on" >
 	              	</div>
 	            </div>
@@ -75,16 +81,15 @@
 					            		<th name="id" >id</th>
 					                	<th name="jobGroup" >jobGroup</th>
 					                  	<th name="jobName" >jobName</th>
-					                  	<th name="jobDesc" >名称</th>
+                                        <th name="JobKey" >JobKey</th>
+					                  	<th name="jobDesc" >描述</th>
 					                  	<th name="jobCron" >Cron</th>
-					                  	<th name="jobClass" >JobBean</th>
 					                  	<th name="executorAddress" >执行器地址</th>
 					                  	<th name="executorParam" >任务参数</th>
 					                  	<th name="addTime" >新增时间</th>
 					                  	<th name="updateTime" >更新时间</th>
 					                  	<th name="author" >负责人</th>
 					                  	<th name="alarmEmail" >报警邮件</th>
-					                  	<th name="alarmThreshold" >报警阀值</th>
 					                  	<th name="glueSwitch" >GLUE模式</th>
 					                  	<th name="jobStatus" >状态</th>
 					                  	<th>操作</th>
@@ -122,7 +127,7 @@
 		            			</#list>
 		                  	</select>
 						</div>
-                        <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
+                        <label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
 					</div>
 					<div class="form-group">
@@ -134,16 +139,6 @@
 					<div class="form-group">
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
-                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
-                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
-					</div>
-					<div class="form-group">
-						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
-						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
-					</div>
-                    <div class="form-group">
                         <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
                         <div class="col-sm-4">
                             <select class="form-control" name="glueSwitch" >
@@ -151,7 +146,13 @@
                                 <option value="1" >GLUE模式</option>
                             </select>
                         </div>
-                    </div>
+					</div>
+					<div class="form-group">
+						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
+						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
+					</div>
                     <hr>
 					<div class="form-group">
 						<div class="col-sm-offset-3 col-sm-6">
@@ -202,7 +203,7 @@ public class DemoJobHandler extends IJobHandler {
                         <div class="col-sm-4">
 							<input type="text" class="form-control jobGroupTitle" maxlength="50" readonly >
 						</div>
-                        <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
+                        <label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
 					</div>
 					<div class="form-group">
@@ -215,21 +216,17 @@ public class DemoJobHandler extends IJobHandler {
 					<div class="form-group">
                         <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
                         <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
-                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
-                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
+                        <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
+                        <div class="col-sm-4">
+                            <input type="text" class="form-control glueSwitchTitle" readonly >
+                        </div>
 					</div>
 					<div class="form-group">
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
 						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
-						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
 					</div>
-                    <div class="form-group">
-                        <label for="firstname" class="col-sm-2 control-label">任务模式<font color="red">*</font></label>
-                        <div class="col-sm-4">
-							<input type="text" class="form-control glueSwitchTitle" readonly >
-						</div>
-                    </div>
 					<hr>
 					<div class="form-group">
 						<div class="col-sm-offset-3 col-sm-3">

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

@@ -78,11 +78,7 @@
 					                	<th name="id" >id</th>
 					                	<th name="jobGroup" >任务组</th>
 					                  	<th name="jobName" >任务名</th>
-					                  	<th name="jobCron" >Cron</th>
-					                  	<th name="jobDesc" >描述</th>
-					                  	<th name="jobClass" >JobBean</th>
 					                  	<th name="executorAddress" >执行器地址</th>
-					                  	<th name="executorHandler" >JobHandler</th>
 					                  	<th name="executorParam" >任务参数</th>
 					                  	<th name="triggerTime" >调度时间</th>
 					                  	<th name="triggerStatus" >调度结果</th>

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

@@ -34,10 +34,10 @@ $(function() {
 	            			return data;
 	            		}
             		},
-	                { "data": 'jobName', "visible" : false},
+					{ "data": 'jobName', "visible" : false},
+					{ "data": 'jobKey', "visible" : true},
 	                { "data": 'jobDesc', "visible" : true},
 	                { "data": 'jobCron', "visible" : true},
-	                { "data": 'jobClass', "visible" : false},
 	                { "data": 'executorAddress', "visible" : false},
 	                { "data": 'executorParam', "visible" : false},
 	                { 
@@ -56,7 +56,6 @@ $(function() {
 	                },
 	                { "data": 'author', "visible" : true},
 	                { "data": 'alarmEmail', "visible" : false},
-	                { "data": 'alarmThreshold', "visible" : false},
 	                { "data": 'glueSwitch', "visible" : false},
 	                { 
 	                	"data": 'jobStatus', 
@@ -95,14 +94,13 @@ $(function() {
 	                			var html = '<p id="'+ row.id +'" '+
 	                							' jobGroup="'+ row.jobGroup +'" '+
 	                							' jobName="'+ row.jobName +'" '+
+												' jobKey="'+ row.jobKey +'" '+
 	                							' jobCron="'+ row.jobCron +'" '+
 	                							' jobDesc="'+ row.jobDesc +'" '+
-	                							' jobClass="'+ row.jobClass +'" '+
 	                							' executorAddress="'+row.executorAddress +'" '+
 	                							' executorParam="'+ row.executorParam +'" '+
 	                							' author="'+ row.author +'" '+
 	                							' alarmEmail="'+ row.alarmEmail +'" '+
-	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
 	                							' glueSwitch="'+ row.glueSwitch +'" '+
 	                							'>'+
 										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
@@ -225,10 +223,6 @@ $(function() {
             },
             alarmEmail : {
             	required : true
-            },
-            alarmThreshold : {
-            	required : true ,
-            	digits:true
             },
 			author : {
 				required : true
@@ -236,7 +230,7 @@ $(function() {
         }, 
         messages : {  
             jobDesc : {
-            	required :"请输入“名称”."
+            	required :"请输入“描述”."
             },
             jobCron : {
             	required :"请输入“Cron”."
@@ -247,10 +241,6 @@ $(function() {
             alarmEmail : {
             	required : "请输入“报警邮件”."
             },
-            alarmThreshold : {
-            	required : "请输入“报警阈值”."  ,
-            	digits:"阀值应该为整数."
-            },
             author : {
             	required : "请输入“负责人”."
             }
@@ -294,26 +284,21 @@ $(function() {
 		// base data
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
 		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
+		$("#updateModal .form .jobKey").val( $(this).parent('p').attr("jobKey") );
 		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
 		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
-		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
 
 		// jobGroupTitle
 		var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
 		$("#updateModal .form .jobGroupTitle").val(jobGroupTitle);
 
-        // jobKey
-        var jobKey = $(this).parent('p').attr("jobGroup") + "_" + $(this).parent('p').attr("jobName");
-        $("#updateModal .form .jobKey").val(jobKey);
-
         // glueSwitchTitle
 		$("#updateModal .form .glueSwitchTitle").val( ($(this).parent('p').attr("glueSwitch") == 0)?"BEAN模式":"GLUE模式" );
 
-
 		// show
 		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
 	});
@@ -336,17 +321,13 @@ $(function() {
 			alarmEmail : {
 				required : true
 			},
-			alarmThreshold : {
-				required : true ,
-				digits:true
-			},
 			author : {
 				required : true
 			}
 		},
 		messages : {
 			jobDesc : {
-				required :"请输入“名称”."
+				required :"请输入“描述”."
 			},
 			jobCron : {
 				required :"请输入“Cron”."
@@ -357,10 +338,6 @@ $(function() {
 			alarmEmail : {
 				required : "请输入“报警邮件”."
 			},
-			alarmThreshold : {
-				required : "请输入“报警阈值”."  ,
-				digits:"阀值应该为整数."
-			},
 			author : {
 				required : "请输入“负责人”."
 			}

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

@@ -96,12 +96,7 @@ $(function() {
 	            		}
             		},
 	                { "data": 'jobName', "visible" : false},
-	                { "data": 'jobCron', "visible" : false},
-	                { "data": 'jobDesc', "visible" : false},
-	                { "data": 'jobClass', "visible" : false},
-	                
 	                { "data": 'executorAddress', "visible" : true},
-	                { "data": 'executorHandler', "visible" : true},
 	                { "data": 'executorParam', "visible" : true},
 	                { 
 	                	"data": 'triggerTime', 

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

@@ -33,7 +33,6 @@ public class XxlJobInfoTest {
 		XxlJobInfo info = new XxlJobInfo();
 		info.setJobName("job_name");
 		info.setJobCron("jobCron");
-		info.setJobClass("jobClass");
 		int count = xxlJobInfoDao.save(info);
 		System.out.println(count);
 		System.out.println(info.getId());

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

@@ -26,8 +26,6 @@ public class XxlJobLogTest {
 	public void save_load(){
 		XxlJobLog xxlJobLog = new XxlJobLog();
 		xxlJobLog.setJobName("job_name");
-		xxlJobLog.setJobCron("jobCron");
-		xxlJobLog.setJobClass("jobClass");
 		int count = xxlJobLogDao.save(xxlJobLog);
 		System.out.println(count);
 		System.out.println(xxlJobLog.getId());

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

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