Browse Source

底层关键数据调整:JobKey的group和name属性,改为采用执行器主键ID和任务主键ID

xueli.xue 8 years ago
parent
commit
d66bdc8811
33 changed files with 218 additions and 336 deletions
  1. 2 0
      README.md
  2. 5 7
      db/tables_xxl_job.sql
  3. 1 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
  4. 8 8
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
  5. 18 14
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
  6. 3 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/biz/AdminBizImpl.java
  7. 6 6
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
  8. 2 11
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
  9. 5 5
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
  10. 1 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
  11. 4 2
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java
  12. 1 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java
  13. 2 4
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java
  14. 3 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java
  15. 3 17
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java
  16. 6 9
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java
  17. 4 4
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java
  18. 41 57
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
  19. 9 23
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
  20. 13 14
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
  21. 1 2
      xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
  22. 8 8
      xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
  23. 6 10
      xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
  24. 9 25
      xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
  25. 4 4
      xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobInfoTest.java
  26. 2 3
      xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java
  27. 10 17
      xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
  28. 12 45
      xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java
  29. 9 9
      xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
  30. 11 11
      xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java
  31. 2 3
      xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java
  32. 3 3
      xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java
  33. 4 6
      xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java

+ 2 - 0
README.md

@@ -738,6 +738,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
 - 4、规范系统配置数据,通过配置文件统一管理;
 - 5、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址;
 - 6、执行器路由规则:第一个、循环、随机、顺序故障(默认)转移;
+- 7、底层扩展数据接口调整;
+- 8、新建任务默认为非运行状态;
 
 #### TODO LIST
 - 1、支持脚本JOB(源码或指定路径), 即shell/python/php等, 日志实时输出并支持在线监控;定制JobHandler实现;

+ 5 - 7
db/tables_xxl_job.sql

@@ -147,8 +147,7 @@ CREATE TABLE XXL_JOB_QRTZ_LOCKS
 
 CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
-  `job_group` int(11) NOT NULL COMMENT '任务组(执行器ID)',
-  `job_name` varchar(255) NOT NULL COMMENT '任务名',
+  `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
   `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
   `job_desc` varchar(255) NOT NULL,
   `add_time` datetime DEFAULT NULL,
@@ -167,8 +166,8 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
 
 CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
-  `job_group` int(11) NOT NULL COMMENT '任务组',
-  `job_name` varchar(255) NOT NULL COMMENT '任务名',
+  `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
+  `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
@@ -181,10 +180,9 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
-CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOGGLUE (
+CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOGGLUE` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
-  `job_group` int(11) NOT NULL,
-  `job_name` varchar(255) NOT NULL,
+  `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
   `glue_source` text,
   `glue_remark` varchar(128) NOT NULL,
   `add_time` timestamp NULL DEFAULT NULL,

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java

@@ -63,7 +63,7 @@ public class JobCodeController {
 		xxlJobInfoDao.update(exists_jobInfo);
 
 		// remove code backup more than 30
-		xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 3);
+		xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 30);
 
 		return ReturnT.SUCCESS;
 	}

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

@@ -64,26 +64,26 @@ public class JobInfoController {
 	
 	@RequestMapping("/remove")
 	@ResponseBody
-	public ReturnT<String> remove(int jobGroup, String jobName) {
-		return xxlJobService.remove(jobGroup, jobName);
+	public ReturnT<String> remove(int id) {
+		return xxlJobService.remove(id);
 	}
 	
 	@RequestMapping("/pause")
 	@ResponseBody
-	public ReturnT<String> pause(int jobGroup, String jobName) {
-		return xxlJobService.pause(jobGroup, jobName);
+	public ReturnT<String> pause(int id) {
+		return xxlJobService.pause(id);
 	}
 	
 	@RequestMapping("/resume")
 	@ResponseBody
-	public ReturnT<String> resume(int jobGroup, String jobName) {
-		return xxlJobService.resume(jobGroup, jobName);
+	public ReturnT<String> resume(int id) {
+		return xxlJobService.resume(id);
 	}
 	
 	@RequestMapping("/trigger")
 	@ResponseBody
-	public ReturnT<String> triggerJob(int jobGroup, String jobName) {
-		return xxlJobService.triggerJob(jobGroup, jobName);
+	public ReturnT<String> triggerJob(int id) {
+		return xxlJobService.triggerJob(id);
 	}
 	
 }

+ 18 - 14
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java

@@ -40,29 +40,33 @@ public class JobLogController {
 	public IXxlJobLogDao xxlJobLogDao;
 
 	@RequestMapping
-	public String index(Model model, String jobGroup, String jobName) {
+	public String index(Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
 
-		// 任务组
+		// 执行器列表
 		List<XxlJobGroup> jobGroupList =  xxlJobGroupDao.findAll();
-
-		model.addAttribute("jobGroup", jobGroup);
-		model.addAttribute("jobName", jobName);
 		model.addAttribute("JobGroupList", jobGroupList);
+
+		// 任务
+		if (jobId > 0) {
+			XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
+			model.addAttribute("jobInfo", jobInfo);
+		}
+
 		return "joblog/joblog.index";
 	}
 
 	@RequestMapping("/getJobsByGroup")
 	@ResponseBody
-	public ReturnT<List<XxlJobLog>> listJobByGroup(String jobGroup){
-		List<XxlJobLog> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
-		return new ReturnT<List<XxlJobLog>>(list);
+	public ReturnT<List<XxlJobInfo>> listJobByGroup(String jobGroup){
+		List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
+		return new ReturnT<List<XxlJobInfo>>(list);
 	}
 	
 	@RequestMapping("/pageList")
 	@ResponseBody
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
 			@RequestParam(required = false, defaultValue = "10") int length,
-			int jobGroup, String jobName, String filterTime) {
+			int jobGroup, int jobId, String filterTime) {
 		
 		// parse param
 		Date triggerTimeStart = null;
@@ -78,8 +82,8 @@ public class JobLogController {
 		}
 		
 		// page query
-		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
-		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
+		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd);
+		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd);
 		
 		// package result
 		Map<String, Object> maps = new HashMap<String, Object>();
@@ -130,8 +134,8 @@ public class JobLogController {
 	public ReturnT<String> logKill(int id){
 		// base check
 		XxlJobLog log = xxlJobLogDao.load(id);
-		XxlJobInfo jobInfo = xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
-		if (log == null || jobInfo==null) {
+		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId());
+		if (jobInfo==null) {
 			return new ReturnT<String>(500, "参数异常");
 		}
 		if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
@@ -146,7 +150,7 @@ public class JobLogController {
 			e.printStackTrace();
 			return new ReturnT<String>(500, e.getMessage());
 		}
-		ReturnT<String> runResult = executorBiz.kill(String.valueOf(log.getJobGroup()), log.getJobName());
+		ReturnT<String> runResult = executorBiz.kill(jobInfo.getId());
 
 		if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
 			log.setHandleCode(ReturnT.FAIL_CODE);

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/biz/AdminBizImpl.java

@@ -32,17 +32,17 @@ public class AdminBizImpl implements AdminBiz {
         // trigger success, to trigger child job, and avoid repeat trigger child job
         String childTriggerMsg = null;
         if (ReturnT.SUCCESS_CODE==handleCallbackParam.getCode() && ReturnT.SUCCESS_CODE!=log.getHandleCode()) {
-            XxlJobInfo xxlJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
+            XxlJobInfo xxlJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
             if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
                 childTriggerMsg = "<hr>";
                 String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
                 for (int i = 0; i < childJobKeys.length; i++) {
                     String[] jobKeyArr = childJobKeys[i].split("_");
                     if (jobKeyArr!=null && jobKeyArr.length==2) {
-                        XxlJobInfo childJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(Integer.valueOf(jobKeyArr[0]), jobKeyArr[1]);
+                        XxlJobInfo childJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(Integer.valueOf(jobKeyArr[1]));
                         if (childJobInfo!=null) {
                             try {
-                                boolean ret = XxlJobDynamicScheduler.triggerJob(childJobInfo.getJobName(), String.valueOf(childJobInfo.getJobGroup()));
+                                boolean ret = XxlJobDynamicScheduler.triggerJob(String.valueOf(childJobInfo.getId()), String.valueOf(childJobInfo.getJobGroup()));
 
                                 // add msg
                                 childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",

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

@@ -35,12 +35,13 @@ public class RemoteHttpJobBean extends QuartzJobBean {
 	protected void executeInternal(JobExecutionContext context)
 			throws JobExecutionException {
 		JobKey jobKey = context.getTrigger().getJobKey();
-		
-		XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(Integer.valueOf(jobKey.getGroup()), jobKey.getName());
+		Integer jobId = Integer.valueOf(jobKey.getName());
+		XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId);
+
 		// save log
 		XxlJobLog jobLog = new XxlJobLog();
 		jobLog.setJobGroup(jobInfo.getJobGroup());
-		jobLog.setJobName(jobInfo.getJobName());
+		jobLog.setJobId(jobInfo.getId());
 		XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog);
 		logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
 
@@ -57,14 +58,13 @@ public class RemoteHttpJobBean extends QuartzJobBean {
 
 		// trigger request
 		TriggerParam triggerParam = new TriggerParam();
-		triggerParam.setJobGroup(String.valueOf(jobInfo.getJobGroup()));
-		triggerParam.setJobName(jobInfo.getJobName());
+		triggerParam.setJobId(jobInfo.getId());
 		triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
 		triggerParam.setExecutorParams(jobInfo.getExecutorParam());
 		triggerParam.setGlueSwitch((jobInfo.getGlueSwitch()==0)?false:true);
-		triggerParam.setLogAddress(adminAddressSet);
 		triggerParam.setLogId(jobLog.getId());
 		triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
+		triggerParam.setLogAddress(adminAddressSet);
 
 		// parse address
 		String groupAddressInfo = "注册方式:";

+ 2 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java

@@ -8,10 +8,9 @@ import java.util.Date;
  */
 public class XxlJobInfo {
 	
-	private int id;
+	private int id;				// 主键ID	    (JobKey.name)
 	
-	private int jobGroup;		// 任务组 (执行器ID)
-	private String jobName;		// 任务名
+	private int jobGroup;		// 执行器主键ID	(JobKey.group)
 	private String jobCron;		// 任务执行CRON表达式 【base on quartz】
 	private String jobDesc;
 	
@@ -50,14 +49,6 @@ public class XxlJobInfo {
 		this.jobGroup = jobGroup;
 	}
 
-	public String getJobName() {
-		return jobName;
-	}
-
-	public void setJobName(String jobName) {
-		this.jobName = jobName;
-	}
-
 	public String getJobCron() {
 		return jobCron;
 	}

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

@@ -12,7 +12,7 @@ public class XxlJobLog {
 	
 	// job info
 	private int jobGroup;
-	private String jobName;
+	private int jobId;
 
 	// execute info
 	private String executorAddress;
@@ -45,12 +45,12 @@ public class XxlJobLog {
 		this.jobGroup = jobGroup;
 	}
 
-	public String getJobName() {
-		return jobName;
+	public int getJobId() {
+		return jobId;
 	}
 
-	public void setJobName(String jobName) {
-		this.jobName = jobName;
+	public void setJobId(int jobId) {
+		this.jobId = jobId;
 	}
 
 	public String getExecutorAddress() {

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java

@@ -7,7 +7,7 @@ package com.xxl.job.admin.core.model;
 public class XxlJobLogGlue {
 	
 	private int id;
-	private int jobId;
+	private int jobId;				// 任务主键ID
 	private String glueSource;
 	private String glueRemark;
 	private String addTime;

+ 4 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java

@@ -143,7 +143,9 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
 	// fill job info
 	public static void fillJobInfo(XxlJobInfo jobInfo) {
 		// TriggerKey : name + group
-        TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup()));
+        String group = String.valueOf(jobInfo.getJobGroup());
+        String name = String.valueOf(jobInfo.getId());
+        TriggerKey triggerKey = TriggerKey.triggerKey(name, group);
 
         try {
 			Trigger trigger = scheduler.getTrigger(triggerKey);
@@ -177,7 +179,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
 
 	// addJob 新增
 	@SuppressWarnings("unchecked")
-	public static boolean addJob(String jobGroup, String jobName, String cronExpression) throws SchedulerException {
+	public static boolean addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException {
     	// TriggerKey : name + group
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
         JobKey jobKey = new JobKey(jobName, jobGroup);

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

@@ -57,7 +57,7 @@ public class JobMonitorHelper {
 									// pass
 								}
 								if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
-									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
+									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
 									if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
 
 										Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));

+ 2 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java

@@ -1,7 +1,6 @@
 package com.xxl.job.admin.dao;
 
 import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
 
 import java.util.List;
 
@@ -18,11 +17,10 @@ public interface IXxlJobInfoDao {
 	public int save(XxlJobInfo info);
 
 	public XxlJobInfo loadById(int id);
-	public XxlJobInfo load(int jobGroup, String jobName);
 	
 	public int update(XxlJobInfo item);
 	
-	public int delete(int jobGroup, String jobName);
+	public int delete(int id);
 
-	public List<XxlJobLog> getJobsByGroup(String jobGroup);
+	public List<XxlJobInfo> getJobsByGroup(String jobGroup);
 }

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java

@@ -11,8 +11,8 @@ import java.util.List;
  */
 public interface IXxlJobLogDao {
 	
-	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
-	public int pageListCount(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
+	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd);
+	public int pageListCount(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd);
 	
 	public XxlJobLog load(int id);
 
@@ -20,6 +20,6 @@ public interface IXxlJobLogDao {
 	public int updateTriggerInfo(XxlJobLog xxlJobLog);
 	public int updateHandleInfo(XxlJobLog xxlJobLog);
 	
-	public int delete(int jobGroup, String jobName);
+	public int delete(int jobId);
 	
 }

+ 3 - 17
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java

@@ -1,7 +1,6 @@
 package com.xxl.job.admin.dao.impl;
 
 import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
 import org.mybatis.spring.SqlSessionTemplate;
 import org.springframework.stereotype.Repository;
@@ -53,30 +52,17 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao {
 	}
 
 	@Override
-	public XxlJobInfo load(int jobGroup, String jobName) {
-		HashMap<String, Object> params = new HashMap<String, Object>();
-		params.put("jobGroup", jobGroup);
-		params.put("jobName", jobName);
-		
-		return sqlSessionTemplate.selectOne("XxlJobInfoMapper.load", params);
-	}
-
-	@Override
 	public int update(XxlJobInfo item) {
 		return sqlSessionTemplate.update("XxlJobInfoMapper.update", item);
 	}
 
 	@Override
-	public int delete(int jobGroup, String jobName) {
-		HashMap<String, Object> params = new HashMap<String, Object>();
-		params.put("jobGroup", jobGroup);
-		params.put("jobName", jobName);
-		
-		return sqlSessionTemplate.update("XxlJobInfoMapper.delete", params);
+	public int delete(int id) {
+		return sqlSessionTemplate.update("XxlJobInfoMapper.delete", id);
 	}
 
 	@Override
-	public List<XxlJobLog> getJobsByGroup(String jobGroup) {
+	public List<XxlJobInfo> getJobsByGroup(String jobGroup) {
 		return sqlSessionTemplate.selectList("XxlJobInfoMapper.getJobsByGroup", jobGroup);
 	}
 

+ 6 - 9
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java

@@ -21,12 +21,12 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
 	public SqlSessionTemplate sqlSessionTemplate;
 
 	@Override
-	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
+	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd) {
 		HashMap<String, Object> params = new HashMap<String, Object>();
 		params.put("offset", offset);
 		params.put("pagesize", pagesize);
 		params.put("jobGroup", jobGroup);
-		params.put("jobName", jobName);
+		params.put("jobId", jobId);
 		params.put("triggerTimeStart", triggerTimeStart);
 		params.put("triggerTimeEnd", triggerTimeEnd);
 		
@@ -34,12 +34,12 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
 	}
 
 	@Override
-	public int pageListCount(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
+	public int pageListCount(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd) {
 		HashMap<String, Object> params = new HashMap<String, Object>();
 		params.put("offset", offset);
 		params.put("pagesize", pagesize);
 		params.put("jobGroup", jobGroup);
-		params.put("jobName", jobName);
+		params.put("jobId", jobId);
 		params.put("triggerTimeStart", triggerTimeStart);
 		params.put("triggerTimeEnd", triggerTimeEnd);
 		
@@ -73,11 +73,8 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
 	}
 
 	@Override
-	public int delete(int jobGroup, String jobName) {
-		HashMap<String, Object> params = new HashMap<String, Object>();
-		params.put("jobGroup", jobGroup);
-		params.put("jobName", jobName);
-		return sqlSessionTemplate.delete("XxlJobLogMapper.delete", params);
+	public int delete(int jobId) {
+		return sqlSessionTemplate.delete("XxlJobLogMapper.delete", jobId);
 	}
 	
 }

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

@@ -19,12 +19,12 @@ public interface IXxlJobService {
 	
 	public ReturnT<String> reschedule(XxlJobInfo jobInfo);
 	
-	public ReturnT<String> remove(int jobGroup, String jobName);
+	public ReturnT<String> remove(int id);
 	
-	public ReturnT<String> pause(int jobGroup, String jobName);
+	public ReturnT<String> pause(int id);
 	
-	public ReturnT<String> resume(int jobGroup, String jobName);
+	public ReturnT<String> resume(int id);
 	
-	public ReturnT<String> triggerJob(int jobGroup, String jobName);
+	public ReturnT<String> triggerJob(int id);
 	
 }

+ 41 - 57
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java

@@ -11,7 +11,6 @@ import com.xxl.job.admin.dao.IXxlJobLogGlueDao;
 import com.xxl.job.admin.service.IXxlJobService;
 import com.xxl.job.core.biz.model.ReturnT;
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.FastDateFormat;
 import org.quartz.CronExpression;
 import org.quartz.SchedulerException;
 import org.slf4j.Logger;
@@ -20,7 +19,6 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.MessageFormat;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -98,53 +96,20 @@ public class XxlJobServiceImpl implements IXxlJobService {
 				if (childJobKeyArr.length!=2) {
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
 				}
-				XxlJobInfo childJobInfo = xxlJobInfoDao.load(Integer.valueOf(childJobKeyArr[0]), childJobKeyArr[1]);
+				XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
 				if (childJobInfo==null) {
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
 				}
 			}
 		}
 
-		// generate jobName
-		String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
-		jobInfo.setJobName(jobName);
-		try {
-			if (XxlJobDynamicScheduler.checkExists(jobName, String.valueOf(jobInfo.getJobGroup()))) {
-				return new ReturnT<String>(500, "系统繁忙,请稍后重试");
-			}
-		} catch (SchedulerException e1) {
-			e1.printStackTrace();
-			return new ReturnT<String>(500, "系统繁忙,请稍后重试");
-		}
-
-		// Backup to the database
-		/*XxlJobInfo jobInfo = new XxlJobInfo();
-		jobInfo.setJobGroup(jobGroup);
-		jobInfo.setJobName(jobName);
-		jobInfo.setJobCron(jobCron);
-		jobInfo.setJobDesc(jobDesc);
-		jobInfo.setAuthor(author);
-		jobInfo.setAlarmEmail(alarmEmail);
-		jobInfo.setExecutorHandler(executorHandler);
-		jobInfo.setExecutorParam(executorParam);
-		jobInfo.setGlueSwitch(glueSwitch);
-		jobInfo.setGlueSource(glueSource);
-		jobInfo.setGlueRemark(glueRemark);
-		jobInfo.setChildJobKey(childJobKey);*/
-
-		try {
-			// add job 2 quartz
-			boolean result = XxlJobDynamicScheduler.addJob(String.valueOf(jobInfo.getJobGroup()), jobName, jobInfo.getJobCron());
-			if (result) {
-				xxlJobInfoDao.save(jobInfo);
-				return ReturnT.SUCCESS;
-			} else {
-				return new ReturnT<String>(500, "新增任务失败");
-			}
-		} catch (SchedulerException e) {
-			logger.error("", e);
+		// add in db
+		xxlJobInfoDao.save(jobInfo);
+		int jobId = jobInfo.getId();
+		if (jobId < 1) {
+			return new ReturnT<String>(500, "新增任务失败");
 		}
-		return ReturnT.FAIL;
+		return ReturnT.SUCCESS;
 	}
 
 	@Override
@@ -178,7 +143,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
 				if (childJobKeyArr.length!=2) {
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
 				}
-				XxlJobInfo childJobInfo = xxlJobInfoDao.load(Integer.valueOf(childJobKeyArr[0]), childJobKeyArr[1]);
+                XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
 				if (childJobInfo==null) {
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
 				}
@@ -203,7 +168,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
 		
 		try {
 			// fresh quartz
-			boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), exists_jobInfo.getJobName(), exists_jobInfo.getJobCron());
+			boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), String.valueOf(exists_jobInfo.getId()), exists_jobInfo.getJobCron());
 			if (ret) {
 				xxlJobInfoDao.update(exists_jobInfo);
 				return ReturnT.SUCCESS;
@@ -217,14 +182,16 @@ public class XxlJobServiceImpl implements IXxlJobService {
 	}
 
 	@Override
-	public ReturnT<String> remove(int jobGroup, String jobName) {
-		XxlJobInfo xxlJobInfo = xxlJobInfoDao.load(jobGroup, jobName);
+	public ReturnT<String> remove(int id) {
+		XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
+        String name = String.valueOf(xxlJobInfo.getId());
 
 		try {
-			XxlJobDynamicScheduler.removeJob(jobName, String.valueOf(jobGroup));
-			xxlJobInfoDao.delete(jobGroup, jobName);
-			xxlJobLogDao.delete(jobGroup, jobName);
-			xxlJobLogGlueDao.deleteByJobId(xxlJobInfo.getId());
+			XxlJobDynamicScheduler.removeJob(name, group);
+			xxlJobInfoDao.delete(id);
+			xxlJobLogDao.delete(id);
+			xxlJobLogGlueDao.deleteByJobId(id);
 			return ReturnT.SUCCESS;
 		} catch (SchedulerException e) {
 			e.printStackTrace();
@@ -233,9 +200,13 @@ public class XxlJobServiceImpl implements IXxlJobService {
 	}
 
 	@Override
-	public ReturnT<String> pause(int jobGroup, String jobName) {
+	public ReturnT<String> pause(int id) {
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
+        String name = String.valueOf(xxlJobInfo.getId());
+
 		try {
-			XxlJobDynamicScheduler.pauseJob(jobName, String.valueOf(jobGroup));	// jobStatus do not store
+			XxlJobDynamicScheduler.pauseJob(name, group);	// jobStatus do not store
 			return ReturnT.SUCCESS;
 		} catch (SchedulerException e) {
 			e.printStackTrace();
@@ -244,10 +215,19 @@ public class XxlJobServiceImpl implements IXxlJobService {
 	}
 
 	@Override
-	public ReturnT<String> resume(int jobGroup, String jobName) {
+	public ReturnT<String> resume(int id) {
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
+        String name = String.valueOf(xxlJobInfo.getId());
+
 		try {
-			XxlJobDynamicScheduler.resumeJob(jobName, String.valueOf(jobGroup));
-			return ReturnT.SUCCESS;
+			boolean ret = false;
+			if (XxlJobDynamicScheduler.checkExists(name, group)) {
+				ret = XxlJobDynamicScheduler.resumeJob(name, group);
+			} else {
+				ret = XxlJobDynamicScheduler.addJob(name, group, xxlJobInfo.getJobCron());
+			}
+			return ret?ReturnT.SUCCESS:ReturnT.FAIL;
 		} catch (SchedulerException e) {
 			e.printStackTrace();
 			return ReturnT.FAIL;
@@ -255,9 +235,13 @@ public class XxlJobServiceImpl implements IXxlJobService {
 	}
 
 	@Override
-	public ReturnT<String> triggerJob(int jobGroup, String jobName) {
+	public ReturnT<String> triggerJob(int id) {
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
+        String name = String.valueOf(xxlJobInfo.getId());
+
 		try {
-			XxlJobDynamicScheduler.triggerJob(jobName, String.valueOf(jobGroup));
+			XxlJobDynamicScheduler.triggerJob(name, group);
 			return ReturnT.SUCCESS;
 		} catch (SchedulerException e) {
 			e.printStackTrace();

+ 9 - 23
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml

@@ -7,7 +7,6 @@
 		<result column="id" property="id" />
 	
 		<result column="job_group" property="jobGroup" />
-	    <result column="job_name" property="jobName" />
 	    <result column="job_cron" property="jobCron" />
 	    <result column="job_desc" property="jobDesc" />
 	    
@@ -31,7 +30,6 @@
 	<sql id="Base_Column_List">
 		t.id,
 		t.job_group,
-		t.job_name,
 		t.job_cron,
 		t.job_desc,
 		t.add_time,
@@ -74,11 +72,10 @@
 			</if>
 		</trim>
 	</select>
-	
+
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_INFO (
 			job_group,
-			job_name,
 			job_cron,
 			job_desc,
 			add_time,
@@ -93,8 +90,7 @@
 			glue_remark,
 			child_jobkey
 		) VALUES (
-			#{jobGroup}, 
-			#{jobName}, 
+			#{jobGroup},
 			#{jobCron}, 
 			#{jobDesc},
 			NOW(),
@@ -109,9 +105,10 @@
 			#{glueRemark},
 			#{childJobKey}
 		);
-		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
-			SELECT LAST_INSERT_ID() 
-		</selectKey> 
+		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
+			SELECT LAST_INSERT_ID()
+			/*SELECT @@IDENTITY AS id*/
+		</selectKey>-->
 	</insert>
 
 	<select id="loadById" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
@@ -119,13 +116,6 @@
 		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
 		WHERE t.id = #{id}
 	</select>
-
-	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
-		SELECT <include refid="Base_Column_List" />
-		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
-		WHERE t.job_group = #{jobGroup}
-			AND t.job_name = #{jobName}
-	</select>
 	
 	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" >
 		UPDATE XXL_JOB_QRTZ_TRIGGER_INFO
@@ -142,17 +132,13 @@
 			glue_source = #{glueSource},
 			glue_remark = #{glueRemark},
 			child_jobkey = #{childJobKey}
-		WHERE job_group = #{jobGroup}
-			AND job_name = #{jobName}
+		WHERE id = #{id}
 	</update>
 	
 	<delete id="delete" parameterType="java.util.HashMap">
 		DELETE
-		FROM
-			XXL_JOB_QRTZ_TRIGGER_INFO
-		WHERE
-			job_group = #{jobGroup}
-		AND job_name = #{jobName}
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO
+		WHERE id = #{id}
 	</delete>
 
 	<select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">

+ 13 - 14
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml

@@ -5,10 +5,10 @@
 	
 	<resultMap id="XxlJobLog" type="com.xxl.job.admin.core.model.XxlJobLog" >
 		<result column="id" property="id" />
-	
-	    <result column="job_group" property="jobGroup" />
-	    <result column="job_name" property="jobName" />
-	    
+
+		<result column="job_group" property="jobGroup" />
+		<result column="job_id" property="jobId" />
+
 	    <result column="executor_address" property="executorAddress" />
 		<result column="executor_handler" property="executorHandler" />
 	    <result column="executor_param" property="executorParam" />
@@ -26,7 +26,7 @@
 	<sql id="Base_Column_List">
 		t.id,
 		t.job_group,
-		t.job_name,
+		t.job_id,
 		t.executor_address,
 		t.executor_handler,
 		t.executor_param,
@@ -45,8 +45,8 @@
 			<if test="jobGroup != null and jobGroup != ''">
 				AND t.job_group = #{jobGroup}
 			</if>
-			<if test="jobName != null and jobName != ''">
-				AND t.job_name = #{jobName}
+			<if test="jobId gt 0">
+				AND t.job_id = #{jobId}
 			</if>
 			<if test="triggerTimeStart != null">
 				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
@@ -66,8 +66,8 @@
 			<if test="jobGroup != null and jobGroup != ''">
 				AND t.job_group = #{jobGroup}
 			</if>
-			<if test="jobName != null and jobName != ''">
-				AND t.job_name = #{jobName}
+			<if test="jobId gt 0">
+				AND t.job_id = #{jobId}
 			</if>
 			<if test="triggerTimeStart != null">
 				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
@@ -88,13 +88,13 @@
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
 			`job_group`,
-			`job_name`,
+			`job_id`,
 			`executor_address`,
 			`executor_handler`,
 			`executor_param`
 		) VALUES (
-			#{jobGroup}, 
-			#{jobName},
+			#{jobGroup},
+			#{jobId},
 			#{executorAddress},
 			#{executorHandler},
 			#{executorParam}
@@ -127,8 +127,7 @@
 	
 	<delete id="delete">
 		delete from XXL_JOB_QRTZ_TRIGGER_LOG
-		WHERE job_group = #{jobGroup}
-			AND job_name = #{jobName}
+		WHERE job_id = #{jobId}
 	</delete>
 	
 </mapper>

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

@@ -51,7 +51,7 @@
                 <div class="col-xs-4">
                     <div class="input-group">
                         <span class="input-group-addon">JobHandler</span>
-                        <input type="text" class="form-control" id="executorHandler" value="${jobName}" autocomplete="on" >
+                        <input type="text" class="form-control" id="executorHandler" autocomplete="on" >
                     </div>
                 </div>
 	            <div class="col-xs-2">
@@ -74,7 +74,6 @@
 					            	<tr>
 					            		<th name="id" >id</th>
 					                	<th name="jobGroup" >jobGroup</th>
-					                  	<th name="jobName" >jobName</th>
                                         <th name="childJobKey" >任务Key</th>
 					                  	<th name="jobDesc" >描述</th>
 					                  	<th name="jobCron" >Cron</th>

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

@@ -35,19 +35,19 @@
 	    		<div class="col-xs-3">
  					<div class="input-group">
 	                	<span class="input-group-addon">执行器</span>
-                		<select class="form-control" id="jobGroup"  paramVal="${jobGroup}" >
-                            <option value="0" selected>请选择</option>
+                		<select class="form-control" id="jobGroup"  paramVal="<#if jobInfo?exists>${jobInfo.jobGroup}</#if>" >
+                            <option value="0" >请选择</option>
                 			<#list JobGroupList as group>
-                				<option value="${group.id}" <#if jobGroup == group.appName && false>selected</#if> >${group.title}</option>
+                				<option value="${group.id}" >${group.title}</option>
                 			</#list>
 	                  	</select>
 	              	</div>
 	            </div>
 	            <div class="col-xs-3">
 	              	<div class="input-group">
-	                	<span class="input-group-addon">描述</span>
-                        <select class="form-control" id="jobName" paramVal="${jobName}" >
-                            <option value="" >请选择</option>
+	                	<span class="input-group-addon">任务</span>
+                        <select class="form-control" id="jobId" paramVal="<#if jobInfo?exists>${jobInfo.id}</#if>" >
+                            <option value="0" >请选择</option>
 						</select>
 	              	</div>
 	            </div>
@@ -76,8 +76,8 @@
 				                <thead>
 					            	<tr>
 					                	<th name="id" >id</th>
-					                	<th name="jobGroup" >任务组</th>
-					                  	<th name="jobName" >任务名</th>
+                                        <th name="jobGroup" >执行器ID</th>
+					                	<th name="jobId" >任务ID</th>
 					                  	<th name="executorAddress" >执行器地址</th>
                                         <th name="executorHandler" >JobHandler</th>
 					                  	<th name="executorParam" >任务参数</th>

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

@@ -34,12 +34,11 @@ $(function() {
 	            			return data;
 	            		}
             		},
-					{ "data": 'jobName', "visible" : false},
 					{
 						"data": 'childJobKey',
 						"visible" : true,
 						"render": function ( data, type, row ) {
-							var jobKey = row.jobGroup + "_" + row.jobName;
+							var jobKey = row.jobGroup + "_" + row.id;
 							return jobKey;
 						}
 					},
@@ -76,7 +75,7 @@ $(function() {
 	                	"render": function ( data, type, row ) {
 	                		if ('NORMAL' == data) {
 	                			return '<small class="label label-success" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
-							} else if ('PAUSED' == data){
+							} else if ('PAUSED' == data || 'NONE' == data){
 								return '<small class="label label-default" title="暂停" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
 							} else if ('BLOCKED' == data){
 								return '<small class="label label-default" title="阻塞[串行]" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
@@ -91,11 +90,11 @@ $(function() {
 	                			var pause_resume = "";
 	                			if ('NORMAL' == row.jobStatus) {
 	                				pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
-								} else if ('PAUSED' == row.jobStatus){
+								} else if ('PAUSED' == row.jobStatus || 'NONE' == row.jobStatus){
 									pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
 								}
 	                			// log url
-	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
+	                			var logUrl = base_url +'/joblog?jobId='+ row.id;
 	                			
 	                			// log url
 	                			var codeBtn = "";
@@ -107,7 +106,6 @@ $(function() {
 								// html
 								var html = '<p id="'+ row.id +'" '+
 									' jobGroup="'+ row.jobGroup +'" '+
-									' jobName="'+ row.jobName +'" '+
 									' jobCron="'+ row.jobCron +'" '+
 									' jobDesc="'+ row.jobDesc +'" '+
 									' author="'+ row.author +'" '+
@@ -188,16 +186,14 @@ $(function() {
 			return;
 		}
 		
-		var jobGroup = $(this).parent('p').attr("jobGroup");
-		var jobName = $(this).parent('p').attr("jobName");
+		var id = $(this).parent('p').attr("id");
 		
 		ComConfirm.show("确认" + typeName + "?", function(){
 			$.ajax({
 				type : 'POST',
 				url : url,
 				data : {
-					"jobGroup" : jobGroup,
-					"jobName"  : jobName
+					"id" : id
 				},
 				dataType : "json",
 				success : function(data){

+ 9 - 25
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js

@@ -1,24 +1,22 @@
 $(function() {
 
 	// 任务组列表选中, 任务列表初始化和选中
-    var ifParam = true;
 	$("#jobGroup").on("change", function () {
 		var jobGroup = $(this).children('option:selected').val();
 		$.ajax({
 			type : 'POST',
-            async: false,   // async, avoid js invoke pagelist before jobName data init
+            async: false,   // async, avoid js invoke pagelist before jobId data init
 			url : base_url + '/joblog/getJobsByGroup',
 			data : {"jobGroup":jobGroup},
 			dataType : "json",
 			success : function(data){
 				if (data.code == 200) {
-					$("#jobName").html('<option value="" >请选择</option>');
-                        $.each(data.content, function (n, value) {
-                        $("#jobName").append('<option value="' + value.jobName + '" >' + value.jobDesc + '</option>');
+					$("#jobId").html('<option value="" >请选择</option>');
+					$.each(data.content, function (n, value) {
+                        $("#jobId").append('<option value="' + value.id + '" >' + value.jobDesc + '</option>');
                     });
-                    if ($("#jobName").attr("paramVal")){
-                        $("#jobName").find("option[value='" + $("#jobName").attr("paramVal") + "']").attr("selected",true);
-                        $("#jobName").attr("paramVal")
+                    if ($("#jobId").attr("paramVal")){
+                        $("#jobId").find("option[value='" + $("#jobId").attr("paramVal") + "']").attr("selected",true);
                     }
 				} else {
 					ComAlertTec.show(data.msg);
@@ -29,7 +27,6 @@ $(function() {
 	if ($("#jobGroup").attr("paramVal")){
 		$("#jobGroup").find("option[value='" + $("#jobGroup").attr("paramVal") + "']").attr("selected",true);
         $("#jobGroup").change();
-        $("#jobGroup").attr("")
 	}
 
 	// 过滤时间
@@ -70,7 +67,7 @@ $(function() {
 	        data : function ( d ) {
 	        	var obj = {};
 	        	obj.jobGroup = $('#jobGroup').val();
-	        	obj.jobName = $('#jobName').val();
+	        	obj.jobId = $('#jobId').val();
 				obj.filterTime = $('#filterTime').val();
 	        	obj.start = d.start;
 	        	obj.length = d.length;
@@ -82,21 +79,8 @@ $(function() {
 	    //"scrollX": false,
 	    "columns": [
 	                { "data": 'id', "bSortable": false, "visible" : false},
-	                { 
-	                	"data": 'jobGroup', 
-	                	"visible" : false, 
-	                	"bSortable": false, 
-	                	"render": function ( data, type, row ) {
-	            			var groupMenu = $("#jobGroup").find("option");
-	            			for ( var index in $("#jobGroup").find("option")) {
-	            				if ($(groupMenu[index]).attr('value') == data) {
-									return $(groupMenu[index]).html();
-								}
-							}
-	            			return data;
-	            		}
-            		},
-	                { "data": 'jobName', "visible" : false},
+					{ "data": 'jobGroup', "visible" : false},
+	                { "data": 'jobId', "visible" : false},
 	                { "data": 'executorAddress', "visible" : true},
 					{
 						"data": 'executorHandler',

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

@@ -29,19 +29,19 @@ public class XxlJobInfoTest {
 	@Test
 	public void save_load(){
 		XxlJobInfo info = new XxlJobInfo();
-		info.setJobName("job_name");
+		info.setJobGroup(1);
 		info.setJobCron("jobCron");
 		int count = xxlJobInfoDao.save(info);
 		System.out.println(count);
 		System.out.println(info.getId());
-		
-		XxlJobInfo item = xxlJobInfoDao.load(0 ,"job_name");
+
+		XxlJobInfo item = xxlJobInfoDao.loadById(2);
 		System.out.println(item);
 	}
 	
 	@Test
 	public void update(){
-		XxlJobInfo item = xxlJobInfoDao.load(0 ,"job_name");
+		XxlJobInfo item = xxlJobInfoDao.loadById(2);
 		
 		item.setJobCron("jobCron2");
 		xxlJobInfoDao.update(item);

+ 2 - 3
xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java

@@ -16,11 +16,10 @@ public interface ExecutorBiz {
 
     /**
      * kill
-     * @param jobGroup
-     * @param jobName
+     * @param jobId
      * @return
      */
-    public ReturnT<String> kill(String jobGroup, String jobName);
+    public ReturnT<String> kill(int jobId);
 
     /**
      * log

+ 10 - 17
xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java

@@ -23,19 +23,15 @@ public class ExecutorBizImpl implements ExecutorBiz {
     }
 
     @Override
-    public ReturnT<String> kill(String jobGroup, String jobName) {
-
-        // generate jobKey
-        String jobKey = jobGroup.concat("_").concat(jobName);
-
+    public ReturnT<String> kill(int jobId) {
         // kill handlerThread, and create new one
-        JobThread jobThread = XxlJobExecutor.loadJobThread(jobKey);
+        JobThread jobThread = XxlJobExecutor.loadJobThread(jobId);
 
         if (jobThread != null) {
             IJobHandler handler = jobThread.getHandler();
             jobThread.toStop("人工手动终止");
             jobThread.interrupt();
-            XxlJobExecutor.removeJobThread(jobKey);
+            XxlJobExecutor.removeJobThread(jobId);
             return ReturnT.SUCCESS;
         }
 
@@ -53,11 +49,8 @@ public class ExecutorBizImpl implements ExecutorBiz {
 
     @Override
     public ReturnT<String> run(TriggerParam triggerParam) {
-        // generate jobKey
-        String jobKey = triggerParam.getJobGroup().concat("_").concat(triggerParam.getJobName());
-
         // load old thread
-        JobThread jobThread = XxlJobExecutor.loadJobThread(jobKey);
+        JobThread jobThread = XxlJobExecutor.loadJobThread(triggerParam.getJobId());
 
         if (!triggerParam.isGlueSwitch()) {
             // bean model
@@ -65,11 +58,11 @@ public class ExecutorBizImpl implements ExecutorBiz {
             // valid handler instance
             IJobHandler jobHandler = XxlJobExecutor.loadJobHandler(triggerParam.getExecutorHandler());
             if (jobHandler==null) {
-                return new ReturnT(ReturnT.FAIL_CODE, "job handler for jobKey=[" + jobKey + "] not found.");
+                return new ReturnT(ReturnT.FAIL_CODE, "job handler for JobId=[" + triggerParam.getJobId() + "] not found.");
             }
 
             if (jobThread == null) {
-                jobThread = XxlJobExecutor.registJobThread(jobKey, jobHandler);
+                jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), jobHandler);
             } else {
                 // job handler update, kill old job thread
                 if (jobThread.getHandler() != jobHandler) {
@@ -78,7 +71,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
                     jobThread.interrupt();
 
                     // new thread, with new job handler
-                    jobThread = XxlJobExecutor.registJobThread(jobKey, jobHandler);
+                    jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), jobHandler);
                 }
             }
         } else {
@@ -86,11 +79,11 @@ public class ExecutorBizImpl implements ExecutorBiz {
 
             // valid glueloader
             if (!GlueFactory.isActive()) {
-                return new ReturnT(ReturnT.FAIL_CODE, "glueLoader for jobKey=[" + jobKey + "] not found.");
+                return new ReturnT(ReturnT.FAIL_CODE, "glueLoader for JobId=[" + triggerParam.getJobId() + "] not found.");
             }
 
             if (jobThread == null) {
-                jobThread = XxlJobExecutor.registJobThread(jobKey, new GlueJobHandler(triggerParam.getJobGroup(), triggerParam.getJobName()));
+                jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), new GlueJobHandler(triggerParam.getJobId()));
             } else {
                 // job handler update, kill old job thread
                 if (!(jobThread.getHandler() instanceof GlueJobHandler)) {
@@ -99,7 +92,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
                     jobThread.interrupt();
 
                     // new thread, with new job handler
-                    jobThread = XxlJobExecutor.registJobThread(jobKey, new GlueJobHandler(triggerParam.getJobGroup(), triggerParam.getJobName()));
+                    jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), new GlueJobHandler(triggerParam.getJobId()));
                 }
             }
         }

+ 12 - 45
xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java

@@ -9,42 +9,24 @@ import java.util.Set;
 public class TriggerParam implements Serializable{
     private static final long serialVersionUID = 42L;
 
-    private String action;
-
-    private String jobGroup;
-    private String jobName;
+    private int jobId;
 
     private String executorHandler;
     private String executorParams;
 
     private boolean glueSwitch;
 
-    private Set<String> logAddress;
     private int logId;
     private long logDateTim;
 
-    public String getAction() {
-        return action;
-    }
-
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    public String getJobGroup() {
-        return jobGroup;
-    }
-
-    public void setJobGroup(String jobGroup) {
-        this.jobGroup = jobGroup;
-    }
+    private Set<String> logAddress;
 
-    public String getJobName() {
-        return jobName;
+    public int getJobId() {
+        return jobId;
     }
 
-    public void setJobName(String jobName) {
-        this.jobName = jobName;
+    public void setJobId(int jobId) {
+        this.jobId = jobId;
     }
 
     public String getExecutorHandler() {
@@ -71,14 +53,6 @@ public class TriggerParam implements Serializable{
         this.glueSwitch = glueSwitch;
     }
 
-    public Set<String> getLogAddress() {
-        return logAddress;
-    }
-
-    public void setLogAddress(Set<String> logAddress) {
-        this.logAddress = logAddress;
-    }
-
     public int getLogId() {
         return logId;
     }
@@ -95,18 +69,11 @@ public class TriggerParam implements Serializable{
         this.logDateTim = logDateTim;
     }
 
-    @Override
-    public String toString() {
-        return "RequestModel{" +
-                ", action='" + action + '\'' +
-                ", jobGroup='" + jobGroup + '\'' +
-                ", jobName='" + jobName + '\'' +
-                ", executorHandler='" + executorHandler + '\'' +
-                ", executorParams='" + executorParams + '\'' +
-                ", glueSwitch=" + glueSwitch +
-                ", logAddress=" + logAddress +
-                ", logId=" + logId +
-                ", logDateTim=" + logDateTim +
-                '}';
+    public Set<String> getLogAddress() {
+        return logAddress;
+    }
+
+    public void setLogAddress(Set<String> logAddress) {
+        this.logAddress = logAddress;
     }
 }

+ 9 - 9
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java

@@ -61,7 +61,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
 
         // job thread repository destory
         if (JobThreadRepository.size() > 0) {
-            for (Map.Entry<String, JobThread> item: JobThreadRepository.entrySet()) {
+            for (Map.Entry<Integer, JobThread> item: JobThreadRepository.entrySet()) {
                 JobThread jobThread = item.getValue();
                 jobThread.toStop("Web容器销毁终止");
                 jobThread.interrupt();
@@ -114,20 +114,20 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
     }
 
     // ---------------------------------- job thread repository
-    private static ConcurrentHashMap<String, JobThread> JobThreadRepository = new ConcurrentHashMap<String, JobThread>();
-    public static JobThread registJobThread(String jobkey, IJobHandler handler){
+    private static ConcurrentHashMap<Integer, JobThread> JobThreadRepository = new ConcurrentHashMap<Integer, JobThread>();
+    public static JobThread registJobThread(int jobId, IJobHandler handler){
         JobThread jobThread = new JobThread(handler);
         jobThread.start();
-        logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobkey:{}, handler:{}", new Object[]{jobkey, handler});
-        JobThreadRepository.put(jobkey, jobThread);	// putIfAbsent | oh my god, map's put method return the old value!!!
+        logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobId:{}, handler:{}", new Object[]{jobId, handler});
+        JobThreadRepository.put(jobId, jobThread);	// putIfAbsent | oh my god, map's put method return the old value!!!
         return jobThread;
     }
-    public static JobThread loadJobThread(String jobKey){
-        JobThread jobThread = JobThreadRepository.get(jobKey);
+    public static JobThread loadJobThread(int jobId){
+        JobThread jobThread = JobThreadRepository.get(jobId);
         return jobThread;
     }
-    public static void removeJobThread(String jobKey){
-        JobThreadRepository.remove(jobKey);
+    public static void removeJobThread(int jobId){
+        JobThreadRepository.remove(jobId);
     }
 
 }

+ 11 - 11
xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java

@@ -112,11 +112,11 @@ public class GlueFactory implements ApplicationContextAware {
 	
 	// ----------------------------- load instance -----------------------------
 	// load new instance, prototype
-	public IJobHandler loadNewInstance(String job_group, String job_name) throws Exception{
-		if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) {
+	public IJobHandler loadNewInstance(int jobId) throws Exception{
+		if (jobId==0) {
 			return null;
 		}
-		String codeSource = glueLoader.load(job_group, job_name);
+		String codeSource = glueLoader.load(jobId);
 		if (codeSource!=null && codeSource.trim().length()>0) {
 			Class<?> clazz = groovyClassLoader.parseClass(codeSource);
 			if (clazz != null) {
@@ -136,14 +136,14 @@ public class GlueFactory implements ApplicationContextAware {
 	}
 	
 	// // load instance, singleton
-	private static String generateInstanceCacheKey(String job_group, String job_name){
-		return job_group.concat("_").concat(job_name).concat("_instance");
+	private static String generateInstanceCacheKey(int jobId){
+		return String.valueOf(jobId).concat("_instance");
 	}
-	public IJobHandler loadInstance(String job_group, String job_name) throws Exception{
-		if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) {
+	public IJobHandler loadInstance(int jobId) throws Exception{
+		if (jobId==0) {
 			return null;
 		}
-		String cacheInstanceKey = generateInstanceCacheKey(job_group, job_name);
+		String cacheInstanceKey = generateInstanceCacheKey(jobId);
 		Object cacheInstance = LocalCache.getInstance().get(cacheInstanceKey);
 		if (cacheInstance!=null) {
 			if (!(cacheInstance instanceof IJobHandler)) {
@@ -152,7 +152,7 @@ public class GlueFactory implements ApplicationContextAware {
 			}
 			return (IJobHandler) cacheInstance;
 		}
-		Object instance = loadNewInstance(job_group, job_name);
+		Object instance = loadNewInstance(jobId);
 		if (instance!=null) {
 			if (!(instance instanceof IJobHandler)) {
 				throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadInstance error, "
@@ -167,8 +167,8 @@ public class GlueFactory implements ApplicationContextAware {
 	}
 	
 	// ----------------------------- util -----------------------------
-	public static void glue(String job_group, String job_name, String... params) throws Exception{
-		GlueFactory.glueFactory.loadInstance(job_group, job_name).execute(params);
+	public static void glue(int jobId, String... params) throws Exception{
+		GlueFactory.glueFactory.loadInstance(jobId).execute(params);
 	}
 	
 }

+ 2 - 3
xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java

@@ -8,10 +8,9 @@ public interface GlueLoader {
 
 	/**
 	 * load code source by name, ensure every load is the latest.
-	 * @param job_group
-	 * @param job_name
+	 * @param jobId
 	 * @return code source
 	 */
-	public String load(String job_group, String job_name);
+	public String load(int jobId);
 	
 }

+ 3 - 3
xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java

@@ -18,9 +18,9 @@ public class DbGlueLoader implements GlueLoader {
     }
 
     @Override
-    public String load(String job_group, String job_name) {
-        String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE job_group = ? AND job_name = ?";
-        List<Map<String, Object>> result = DBUtil.query(dataSource, sql, new String[]{job_group, job_name});
+    public String load(int jobId) {
+        String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE id = ?";
+        List<Map<String, Object>> result = DBUtil.query(dataSource, sql, new Object[]{jobId});
         if (result!=null && result.size()==1 && result.get(0)!=null && result.get(0).get("glue_source")!=null ) {
             return (String) result.get(0).get("glue_source");
         }

+ 4 - 6
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java

@@ -9,16 +9,14 @@ import com.xxl.job.core.handler.IJobHandler;
  */
 public class GlueJobHandler extends IJobHandler {
 	
-	private String job_group;
-	private String job_name;
-	public GlueJobHandler(String job_group, String job_name) {
-		this.job_group = job_group;
-		this.job_name = job_name;
+	private int jobId;
+	public GlueJobHandler(int jobId) {
+		this.jobId = jobId;
 	}
 
 	@Override
 	public void execute(String... params) throws Exception {
-		GlueFactory.glue(job_group, job_name, params);
+		GlueFactory.glue(jobId, params);
 	}
 
 }