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 View File

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

+ 5 - 7
db/tables_xxl_job.sql View File

147
 
147
 
148
 CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
148
 CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
149
   `id` int(11) NOT NULL AUTO_INCREMENT,
149
   `id` int(11) NOT NULL AUTO_INCREMENT,
150
-  `job_group` int(11) NOT NULL COMMENT '任务组(执行器ID)',
151
-  `job_name` varchar(255) NOT NULL COMMENT '任务名',
150
+  `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
152
   `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
151
   `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
153
   `job_desc` varchar(255) NOT NULL,
152
   `job_desc` varchar(255) NOT NULL,
154
   `add_time` datetime DEFAULT NULL,
153
   `add_time` datetime DEFAULT NULL,
167
 
166
 
168
 CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
167
 CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
169
   `id` int(11) NOT NULL AUTO_INCREMENT,
168
   `id` int(11) NOT NULL AUTO_INCREMENT,
170
-  `job_group` int(11) NOT NULL COMMENT '任务组',
171
-  `job_name` varchar(255) NOT NULL COMMENT '任务名',
169
+  `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
170
+  `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
172
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
171
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
173
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
172
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
174
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
173
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
181
   PRIMARY KEY (`id`)
180
   PRIMARY KEY (`id`)
182
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
181
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
183
 
182
 
184
-CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOGGLUE (
183
+CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOGGLUE` (
185
   `id` int(11) NOT NULL AUTO_INCREMENT,
184
   `id` int(11) NOT NULL AUTO_INCREMENT,
186
-  `job_group` int(11) NOT NULL,
187
-  `job_name` varchar(255) NOT NULL,
185
+  `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
188
   `glue_source` text,
186
   `glue_source` text,
189
   `glue_remark` varchar(128) NOT NULL,
187
   `glue_remark` varchar(128) NOT NULL,
190
   `add_time` timestamp NULL DEFAULT NULL,
188
   `add_time` timestamp NULL DEFAULT NULL,

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

63
 		xxlJobInfoDao.update(exists_jobInfo);
63
 		xxlJobInfoDao.update(exists_jobInfo);
64
 
64
 
65
 		// remove code backup more than 30
65
 		// remove code backup more than 30
66
-		xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 3);
66
+		xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 30);
67
 
67
 
68
 		return ReturnT.SUCCESS;
68
 		return ReturnT.SUCCESS;
69
 	}
69
 	}

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

64
 	
64
 	
65
 	@RequestMapping("/remove")
65
 	@RequestMapping("/remove")
66
 	@ResponseBody
66
 	@ResponseBody
67
-	public ReturnT<String> remove(int jobGroup, String jobName) {
68
-		return xxlJobService.remove(jobGroup, jobName);
67
+	public ReturnT<String> remove(int id) {
68
+		return xxlJobService.remove(id);
69
 	}
69
 	}
70
 	
70
 	
71
 	@RequestMapping("/pause")
71
 	@RequestMapping("/pause")
72
 	@ResponseBody
72
 	@ResponseBody
73
-	public ReturnT<String> pause(int jobGroup, String jobName) {
74
-		return xxlJobService.pause(jobGroup, jobName);
73
+	public ReturnT<String> pause(int id) {
74
+		return xxlJobService.pause(id);
75
 	}
75
 	}
76
 	
76
 	
77
 	@RequestMapping("/resume")
77
 	@RequestMapping("/resume")
78
 	@ResponseBody
78
 	@ResponseBody
79
-	public ReturnT<String> resume(int jobGroup, String jobName) {
80
-		return xxlJobService.resume(jobGroup, jobName);
79
+	public ReturnT<String> resume(int id) {
80
+		return xxlJobService.resume(id);
81
 	}
81
 	}
82
 	
82
 	
83
 	@RequestMapping("/trigger")
83
 	@RequestMapping("/trigger")
84
 	@ResponseBody
84
 	@ResponseBody
85
-	public ReturnT<String> triggerJob(int jobGroup, String jobName) {
86
-		return xxlJobService.triggerJob(jobGroup, jobName);
85
+	public ReturnT<String> triggerJob(int id) {
86
+		return xxlJobService.triggerJob(id);
87
 	}
87
 	}
88
 	
88
 	
89
 }
89
 }

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

40
 	public IXxlJobLogDao xxlJobLogDao;
40
 	public IXxlJobLogDao xxlJobLogDao;
41
 
41
 
42
 	@RequestMapping
42
 	@RequestMapping
43
-	public String index(Model model, String jobGroup, String jobName) {
43
+	public String index(Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
44
 
44
 
45
-		// 任务组
45
+		// 执行器列表
46
 		List<XxlJobGroup> jobGroupList =  xxlJobGroupDao.findAll();
46
 		List<XxlJobGroup> jobGroupList =  xxlJobGroupDao.findAll();
47
-
48
-		model.addAttribute("jobGroup", jobGroup);
49
-		model.addAttribute("jobName", jobName);
50
 		model.addAttribute("JobGroupList", jobGroupList);
47
 		model.addAttribute("JobGroupList", jobGroupList);
48
+
49
+		// 任务
50
+		if (jobId > 0) {
51
+			XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
52
+			model.addAttribute("jobInfo", jobInfo);
53
+		}
54
+
51
 		return "joblog/joblog.index";
55
 		return "joblog/joblog.index";
52
 	}
56
 	}
53
 
57
 
54
 	@RequestMapping("/getJobsByGroup")
58
 	@RequestMapping("/getJobsByGroup")
55
 	@ResponseBody
59
 	@ResponseBody
56
-	public ReturnT<List<XxlJobLog>> listJobByGroup(String jobGroup){
57
-		List<XxlJobLog> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
58
-		return new ReturnT<List<XxlJobLog>>(list);
60
+	public ReturnT<List<XxlJobInfo>> listJobByGroup(String jobGroup){
61
+		List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
62
+		return new ReturnT<List<XxlJobInfo>>(list);
59
 	}
63
 	}
60
 	
64
 	
61
 	@RequestMapping("/pageList")
65
 	@RequestMapping("/pageList")
62
 	@ResponseBody
66
 	@ResponseBody
63
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
67
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
64
 			@RequestParam(required = false, defaultValue = "10") int length,
68
 			@RequestParam(required = false, defaultValue = "10") int length,
65
-			int jobGroup, String jobName, String filterTime) {
69
+			int jobGroup, int jobId, String filterTime) {
66
 		
70
 		
67
 		// parse param
71
 		// parse param
68
 		Date triggerTimeStart = null;
72
 		Date triggerTimeStart = null;
78
 		}
82
 		}
79
 		
83
 		
80
 		// page query
84
 		// page query
81
-		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
82
-		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
85
+		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd);
86
+		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd);
83
 		
87
 		
84
 		// package result
88
 		// package result
85
 		Map<String, Object> maps = new HashMap<String, Object>();
89
 		Map<String, Object> maps = new HashMap<String, Object>();
130
 	public ReturnT<String> logKill(int id){
134
 	public ReturnT<String> logKill(int id){
131
 		// base check
135
 		// base check
132
 		XxlJobLog log = xxlJobLogDao.load(id);
136
 		XxlJobLog log = xxlJobLogDao.load(id);
133
-		XxlJobInfo jobInfo = xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
134
-		if (log == null || jobInfo==null) {
137
+		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId());
138
+		if (jobInfo==null) {
135
 			return new ReturnT<String>(500, "参数异常");
139
 			return new ReturnT<String>(500, "参数异常");
136
 		}
140
 		}
137
 		if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
141
 		if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
146
 			e.printStackTrace();
150
 			e.printStackTrace();
147
 			return new ReturnT<String>(500, e.getMessage());
151
 			return new ReturnT<String>(500, e.getMessage());
148
 		}
152
 		}
149
-		ReturnT<String> runResult = executorBiz.kill(String.valueOf(log.getJobGroup()), log.getJobName());
153
+		ReturnT<String> runResult = executorBiz.kill(jobInfo.getId());
150
 
154
 
151
 		if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
155
 		if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
152
 			log.setHandleCode(ReturnT.FAIL_CODE);
156
 			log.setHandleCode(ReturnT.FAIL_CODE);

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

32
         // trigger success, to trigger child job, and avoid repeat trigger child job
32
         // trigger success, to trigger child job, and avoid repeat trigger child job
33
         String childTriggerMsg = null;
33
         String childTriggerMsg = null;
34
         if (ReturnT.SUCCESS_CODE==handleCallbackParam.getCode() && ReturnT.SUCCESS_CODE!=log.getHandleCode()) {
34
         if (ReturnT.SUCCESS_CODE==handleCallbackParam.getCode() && ReturnT.SUCCESS_CODE!=log.getHandleCode()) {
35
-            XxlJobInfo xxlJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
35
+            XxlJobInfo xxlJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
36
             if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
36
             if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
37
                 childTriggerMsg = "<hr>";
37
                 childTriggerMsg = "<hr>";
38
                 String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
38
                 String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
39
                 for (int i = 0; i < childJobKeys.length; i++) {
39
                 for (int i = 0; i < childJobKeys.length; i++) {
40
                     String[] jobKeyArr = childJobKeys[i].split("_");
40
                     String[] jobKeyArr = childJobKeys[i].split("_");
41
                     if (jobKeyArr!=null && jobKeyArr.length==2) {
41
                     if (jobKeyArr!=null && jobKeyArr.length==2) {
42
-                        XxlJobInfo childJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(Integer.valueOf(jobKeyArr[0]), jobKeyArr[1]);
42
+                        XxlJobInfo childJobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(Integer.valueOf(jobKeyArr[1]));
43
                         if (childJobInfo!=null) {
43
                         if (childJobInfo!=null) {
44
                             try {
44
                             try {
45
-                                boolean ret = XxlJobDynamicScheduler.triggerJob(childJobInfo.getJobName(), String.valueOf(childJobInfo.getJobGroup()));
45
+                                boolean ret = XxlJobDynamicScheduler.triggerJob(String.valueOf(childJobInfo.getId()), String.valueOf(childJobInfo.getJobGroup()));
46
 
46
 
47
                                 // add msg
47
                                 // add msg
48
                                 childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",
48
                                 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 View File

35
 	protected void executeInternal(JobExecutionContext context)
35
 	protected void executeInternal(JobExecutionContext context)
36
 			throws JobExecutionException {
36
 			throws JobExecutionException {
37
 		JobKey jobKey = context.getTrigger().getJobKey();
37
 		JobKey jobKey = context.getTrigger().getJobKey();
38
-		
39
-		XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.load(Integer.valueOf(jobKey.getGroup()), jobKey.getName());
38
+		Integer jobId = Integer.valueOf(jobKey.getName());
39
+		XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId);
40
+
40
 		// save log
41
 		// save log
41
 		XxlJobLog jobLog = new XxlJobLog();
42
 		XxlJobLog jobLog = new XxlJobLog();
42
 		jobLog.setJobGroup(jobInfo.getJobGroup());
43
 		jobLog.setJobGroup(jobInfo.getJobGroup());
43
-		jobLog.setJobName(jobInfo.getJobName());
44
+		jobLog.setJobId(jobInfo.getId());
44
 		XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog);
45
 		XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog);
45
 		logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
46
 		logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
46
 
47
 
57
 
58
 
58
 		// trigger request
59
 		// trigger request
59
 		TriggerParam triggerParam = new TriggerParam();
60
 		TriggerParam triggerParam = new TriggerParam();
60
-		triggerParam.setJobGroup(String.valueOf(jobInfo.getJobGroup()));
61
-		triggerParam.setJobName(jobInfo.getJobName());
61
+		triggerParam.setJobId(jobInfo.getId());
62
 		triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
62
 		triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
63
 		triggerParam.setExecutorParams(jobInfo.getExecutorParam());
63
 		triggerParam.setExecutorParams(jobInfo.getExecutorParam());
64
 		triggerParam.setGlueSwitch((jobInfo.getGlueSwitch()==0)?false:true);
64
 		triggerParam.setGlueSwitch((jobInfo.getGlueSwitch()==0)?false:true);
65
-		triggerParam.setLogAddress(adminAddressSet);
66
 		triggerParam.setLogId(jobLog.getId());
65
 		triggerParam.setLogId(jobLog.getId());
67
 		triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
66
 		triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
67
+		triggerParam.setLogAddress(adminAddressSet);
68
 
68
 
69
 		// parse address
69
 		// parse address
70
 		String groupAddressInfo = "注册方式:";
70
 		String groupAddressInfo = "注册方式:";

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

8
  */
8
  */
9
 public class XxlJobInfo {
9
 public class XxlJobInfo {
10
 	
10
 	
11
-	private int id;
11
+	private int id;				// 主键ID	    (JobKey.name)
12
 	
12
 	
13
-	private int jobGroup;		// 任务组 (执行器ID)
14
-	private String jobName;		// 任务名
13
+	private int jobGroup;		// 执行器主键ID	(JobKey.group)
15
 	private String jobCron;		// 任务执行CRON表达式 【base on quartz】
14
 	private String jobCron;		// 任务执行CRON表达式 【base on quartz】
16
 	private String jobDesc;
15
 	private String jobDesc;
17
 	
16
 	
50
 		this.jobGroup = jobGroup;
49
 		this.jobGroup = jobGroup;
51
 	}
50
 	}
52
 
51
 
53
-	public String getJobName() {
54
-		return jobName;
55
-	}
56
-
57
-	public void setJobName(String jobName) {
58
-		this.jobName = jobName;
59
-	}
60
-
61
 	public String getJobCron() {
52
 	public String getJobCron() {
62
 		return jobCron;
53
 		return jobCron;
63
 	}
54
 	}

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

12
 	
12
 	
13
 	// job info
13
 	// job info
14
 	private int jobGroup;
14
 	private int jobGroup;
15
-	private String jobName;
15
+	private int jobId;
16
 
16
 
17
 	// execute info
17
 	// execute info
18
 	private String executorAddress;
18
 	private String executorAddress;
45
 		this.jobGroup = jobGroup;
45
 		this.jobGroup = jobGroup;
46
 	}
46
 	}
47
 
47
 
48
-	public String getJobName() {
49
-		return jobName;
48
+	public int getJobId() {
49
+		return jobId;
50
 	}
50
 	}
51
 
51
 
52
-	public void setJobName(String jobName) {
53
-		this.jobName = jobName;
52
+	public void setJobId(int jobId) {
53
+		this.jobId = jobId;
54
 	}
54
 	}
55
 
55
 
56
 	public String getExecutorAddress() {
56
 	public String getExecutorAddress() {

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

7
 public class XxlJobLogGlue {
7
 public class XxlJobLogGlue {
8
 	
8
 	
9
 	private int id;
9
 	private int id;
10
-	private int jobId;
10
+	private int jobId;				// 任务主键ID
11
 	private String glueSource;
11
 	private String glueSource;
12
 	private String glueRemark;
12
 	private String glueRemark;
13
 	private String addTime;
13
 	private String addTime;

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

143
 	// fill job info
143
 	// fill job info
144
 	public static void fillJobInfo(XxlJobInfo jobInfo) {
144
 	public static void fillJobInfo(XxlJobInfo jobInfo) {
145
 		// TriggerKey : name + group
145
 		// TriggerKey : name + group
146
-        TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup()));
146
+        String group = String.valueOf(jobInfo.getJobGroup());
147
+        String name = String.valueOf(jobInfo.getId());
148
+        TriggerKey triggerKey = TriggerKey.triggerKey(name, group);
147
 
149
 
148
         try {
150
         try {
149
 			Trigger trigger = scheduler.getTrigger(triggerKey);
151
 			Trigger trigger = scheduler.getTrigger(triggerKey);
177
 
179
 
178
 	// addJob 新增
180
 	// addJob 新增
179
 	@SuppressWarnings("unchecked")
181
 	@SuppressWarnings("unchecked")
180
-	public static boolean addJob(String jobGroup, String jobName, String cronExpression) throws SchedulerException {
182
+	public static boolean addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException {
181
     	// TriggerKey : name + group
183
     	// TriggerKey : name + group
182
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
184
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
183
         JobKey jobKey = new JobKey(jobName, jobGroup);
185
         JobKey jobKey = new JobKey(jobName, jobGroup);

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

57
 									// pass
57
 									// pass
58
 								}
58
 								}
59
 								if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
59
 								if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
60
-									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
60
+									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
61
 									if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
61
 									if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
62
 
62
 
63
 										Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
63
 										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 View File

1
 package com.xxl.job.admin.dao;
1
 package com.xxl.job.admin.dao;
2
 
2
 
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
-import com.xxl.job.admin.core.model.XxlJobLog;
5
 
4
 
6
 import java.util.List;
5
 import java.util.List;
7
 
6
 
18
 	public int save(XxlJobInfo info);
17
 	public int save(XxlJobInfo info);
19
 
18
 
20
 	public XxlJobInfo loadById(int id);
19
 	public XxlJobInfo loadById(int id);
21
-	public XxlJobInfo load(int jobGroup, String jobName);
22
 	
20
 	
23
 	public int update(XxlJobInfo item);
21
 	public int update(XxlJobInfo item);
24
 	
22
 	
25
-	public int delete(int jobGroup, String jobName);
23
+	public int delete(int id);
26
 
24
 
27
-	public List<XxlJobLog> getJobsByGroup(String jobGroup);
25
+	public List<XxlJobInfo> getJobsByGroup(String jobGroup);
28
 }
26
 }

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

11
  */
11
  */
12
 public interface IXxlJobLogDao {
12
 public interface IXxlJobLogDao {
13
 	
13
 	
14
-	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
15
-	public int pageListCount(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
14
+	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd);
15
+	public int pageListCount(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd);
16
 	
16
 	
17
 	public XxlJobLog load(int id);
17
 	public XxlJobLog load(int id);
18
 
18
 
20
 	public int updateTriggerInfo(XxlJobLog xxlJobLog);
20
 	public int updateTriggerInfo(XxlJobLog xxlJobLog);
21
 	public int updateHandleInfo(XxlJobLog xxlJobLog);
21
 	public int updateHandleInfo(XxlJobLog xxlJobLog);
22
 	
22
 	
23
-	public int delete(int jobGroup, String jobName);
23
+	public int delete(int jobId);
24
 	
24
 	
25
 }
25
 }

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

1
 package com.xxl.job.admin.dao.impl;
1
 package com.xxl.job.admin.dao.impl;
2
 
2
 
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
3
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
-import com.xxl.job.admin.core.model.XxlJobLog;
5
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
4
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
6
 import org.mybatis.spring.SqlSessionTemplate;
5
 import org.mybatis.spring.SqlSessionTemplate;
7
 import org.springframework.stereotype.Repository;
6
 import org.springframework.stereotype.Repository;
53
 	}
52
 	}
54
 
53
 
55
 	@Override
54
 	@Override
56
-	public XxlJobInfo load(int jobGroup, String jobName) {
57
-		HashMap<String, Object> params = new HashMap<String, Object>();
58
-		params.put("jobGroup", jobGroup);
59
-		params.put("jobName", jobName);
60
-		
61
-		return sqlSessionTemplate.selectOne("XxlJobInfoMapper.load", params);
62
-	}
63
-
64
-	@Override
65
 	public int update(XxlJobInfo item) {
55
 	public int update(XxlJobInfo item) {
66
 		return sqlSessionTemplate.update("XxlJobInfoMapper.update", item);
56
 		return sqlSessionTemplate.update("XxlJobInfoMapper.update", item);
67
 	}
57
 	}
68
 
58
 
69
 	@Override
59
 	@Override
70
-	public int delete(int jobGroup, String jobName) {
71
-		HashMap<String, Object> params = new HashMap<String, Object>();
72
-		params.put("jobGroup", jobGroup);
73
-		params.put("jobName", jobName);
74
-		
75
-		return sqlSessionTemplate.update("XxlJobInfoMapper.delete", params);
60
+	public int delete(int id) {
61
+		return sqlSessionTemplate.update("XxlJobInfoMapper.delete", id);
76
 	}
62
 	}
77
 
63
 
78
 	@Override
64
 	@Override
79
-	public List<XxlJobLog> getJobsByGroup(String jobGroup) {
65
+	public List<XxlJobInfo> getJobsByGroup(String jobGroup) {
80
 		return sqlSessionTemplate.selectList("XxlJobInfoMapper.getJobsByGroup", jobGroup);
66
 		return sqlSessionTemplate.selectList("XxlJobInfoMapper.getJobsByGroup", jobGroup);
81
 	}
67
 	}
82
 
68
 

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

21
 	public SqlSessionTemplate sqlSessionTemplate;
21
 	public SqlSessionTemplate sqlSessionTemplate;
22
 
22
 
23
 	@Override
23
 	@Override
24
-	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
24
+	public List<XxlJobLog> pageList(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd) {
25
 		HashMap<String, Object> params = new HashMap<String, Object>();
25
 		HashMap<String, Object> params = new HashMap<String, Object>();
26
 		params.put("offset", offset);
26
 		params.put("offset", offset);
27
 		params.put("pagesize", pagesize);
27
 		params.put("pagesize", pagesize);
28
 		params.put("jobGroup", jobGroup);
28
 		params.put("jobGroup", jobGroup);
29
-		params.put("jobName", jobName);
29
+		params.put("jobId", jobId);
30
 		params.put("triggerTimeStart", triggerTimeStart);
30
 		params.put("triggerTimeStart", triggerTimeStart);
31
 		params.put("triggerTimeEnd", triggerTimeEnd);
31
 		params.put("triggerTimeEnd", triggerTimeEnd);
32
 		
32
 		
34
 	}
34
 	}
35
 
35
 
36
 	@Override
36
 	@Override
37
-	public int pageListCount(int offset, int pagesize, int jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
37
+	public int pageListCount(int offset, int pagesize, int jobGroup, int jobId, Date triggerTimeStart, Date triggerTimeEnd) {
38
 		HashMap<String, Object> params = new HashMap<String, Object>();
38
 		HashMap<String, Object> params = new HashMap<String, Object>();
39
 		params.put("offset", offset);
39
 		params.put("offset", offset);
40
 		params.put("pagesize", pagesize);
40
 		params.put("pagesize", pagesize);
41
 		params.put("jobGroup", jobGroup);
41
 		params.put("jobGroup", jobGroup);
42
-		params.put("jobName", jobName);
42
+		params.put("jobId", jobId);
43
 		params.put("triggerTimeStart", triggerTimeStart);
43
 		params.put("triggerTimeStart", triggerTimeStart);
44
 		params.put("triggerTimeEnd", triggerTimeEnd);
44
 		params.put("triggerTimeEnd", triggerTimeEnd);
45
 		
45
 		
73
 	}
73
 	}
74
 
74
 
75
 	@Override
75
 	@Override
76
-	public int delete(int jobGroup, String jobName) {
77
-		HashMap<String, Object> params = new HashMap<String, Object>();
78
-		params.put("jobGroup", jobGroup);
79
-		params.put("jobName", jobName);
80
-		return sqlSessionTemplate.delete("XxlJobLogMapper.delete", params);
76
+	public int delete(int jobId) {
77
+		return sqlSessionTemplate.delete("XxlJobLogMapper.delete", jobId);
81
 	}
78
 	}
82
 	
79
 	
83
 }
80
 }

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

19
 	
19
 	
20
 	public ReturnT<String> reschedule(XxlJobInfo jobInfo);
20
 	public ReturnT<String> reschedule(XxlJobInfo jobInfo);
21
 	
21
 	
22
-	public ReturnT<String> remove(int jobGroup, String jobName);
22
+	public ReturnT<String> remove(int id);
23
 	
23
 	
24
-	public ReturnT<String> pause(int jobGroup, String jobName);
24
+	public ReturnT<String> pause(int id);
25
 	
25
 	
26
-	public ReturnT<String> resume(int jobGroup, String jobName);
26
+	public ReturnT<String> resume(int id);
27
 	
27
 	
28
-	public ReturnT<String> triggerJob(int jobGroup, String jobName);
28
+	public ReturnT<String> triggerJob(int id);
29
 	
29
 	
30
 }
30
 }

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

11
 import com.xxl.job.admin.service.IXxlJobService;
11
 import com.xxl.job.admin.service.IXxlJobService;
12
 import com.xxl.job.core.biz.model.ReturnT;
12
 import com.xxl.job.core.biz.model.ReturnT;
13
 import org.apache.commons.lang.StringUtils;
13
 import org.apache.commons.lang.StringUtils;
14
-import org.apache.commons.lang.time.FastDateFormat;
15
 import org.quartz.CronExpression;
14
 import org.quartz.CronExpression;
16
 import org.quartz.SchedulerException;
15
 import org.quartz.SchedulerException;
17
 import org.slf4j.Logger;
16
 import org.slf4j.Logger;
20
 
19
 
21
 import javax.annotation.Resource;
20
 import javax.annotation.Resource;
22
 import java.text.MessageFormat;
21
 import java.text.MessageFormat;
23
-import java.util.Date;
24
 import java.util.HashMap;
22
 import java.util.HashMap;
25
 import java.util.List;
23
 import java.util.List;
26
 import java.util.Map;
24
 import java.util.Map;
98
 				if (childJobKeyArr.length!=2) {
96
 				if (childJobKeyArr.length!=2) {
99
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
97
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
100
 				}
98
 				}
101
-				XxlJobInfo childJobInfo = xxlJobInfoDao.load(Integer.valueOf(childJobKeyArr[0]), childJobKeyArr[1]);
99
+				XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
102
 				if (childJobInfo==null) {
100
 				if (childJobInfo==null) {
103
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
101
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
104
 				}
102
 				}
105
 			}
103
 			}
106
 		}
104
 		}
107
 
105
 
108
-		// generate jobName
109
-		String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
110
-		jobInfo.setJobName(jobName);
111
-		try {
112
-			if (XxlJobDynamicScheduler.checkExists(jobName, String.valueOf(jobInfo.getJobGroup()))) {
113
-				return new ReturnT<String>(500, "系统繁忙,请稍后重试");
114
-			}
115
-		} catch (SchedulerException e1) {
116
-			e1.printStackTrace();
117
-			return new ReturnT<String>(500, "系统繁忙,请稍后重试");
118
-		}
119
-
120
-		// Backup to the database
121
-		/*XxlJobInfo jobInfo = new XxlJobInfo();
122
-		jobInfo.setJobGroup(jobGroup);
123
-		jobInfo.setJobName(jobName);
124
-		jobInfo.setJobCron(jobCron);
125
-		jobInfo.setJobDesc(jobDesc);
126
-		jobInfo.setAuthor(author);
127
-		jobInfo.setAlarmEmail(alarmEmail);
128
-		jobInfo.setExecutorHandler(executorHandler);
129
-		jobInfo.setExecutorParam(executorParam);
130
-		jobInfo.setGlueSwitch(glueSwitch);
131
-		jobInfo.setGlueSource(glueSource);
132
-		jobInfo.setGlueRemark(glueRemark);
133
-		jobInfo.setChildJobKey(childJobKey);*/
134
-
135
-		try {
136
-			// add job 2 quartz
137
-			boolean result = XxlJobDynamicScheduler.addJob(String.valueOf(jobInfo.getJobGroup()), jobName, jobInfo.getJobCron());
138
-			if (result) {
139
-				xxlJobInfoDao.save(jobInfo);
140
-				return ReturnT.SUCCESS;
141
-			} else {
142
-				return new ReturnT<String>(500, "新增任务失败");
143
-			}
144
-		} catch (SchedulerException e) {
145
-			logger.error("", e);
106
+		// add in db
107
+		xxlJobInfoDao.save(jobInfo);
108
+		int jobId = jobInfo.getId();
109
+		if (jobId < 1) {
110
+			return new ReturnT<String>(500, "新增任务失败");
146
 		}
111
 		}
147
-		return ReturnT.FAIL;
112
+		return ReturnT.SUCCESS;
148
 	}
113
 	}
149
 
114
 
150
 	@Override
115
 	@Override
178
 				if (childJobKeyArr.length!=2) {
143
 				if (childJobKeyArr.length!=2) {
179
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
144
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})格式错误", childJobKeyItem));
180
 				}
145
 				}
181
-				XxlJobInfo childJobInfo = xxlJobInfoDao.load(Integer.valueOf(childJobKeyArr[0]), childJobKeyArr[1]);
146
+                XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.valueOf(childJobKeyArr[1]));
182
 				if (childJobInfo==null) {
147
 				if (childJobInfo==null) {
183
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
148
 					return new ReturnT<String>(500, MessageFormat.format("子任务Key({0})无效", childJobKeyItem));
184
 				}
149
 				}
203
 		
168
 		
204
 		try {
169
 		try {
205
 			// fresh quartz
170
 			// fresh quartz
206
-			boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), exists_jobInfo.getJobName(), exists_jobInfo.getJobCron());
171
+			boolean ret = XxlJobDynamicScheduler.rescheduleJob(String.valueOf(exists_jobInfo.getJobGroup()), String.valueOf(exists_jobInfo.getId()), exists_jobInfo.getJobCron());
207
 			if (ret) {
172
 			if (ret) {
208
 				xxlJobInfoDao.update(exists_jobInfo);
173
 				xxlJobInfoDao.update(exists_jobInfo);
209
 				return ReturnT.SUCCESS;
174
 				return ReturnT.SUCCESS;
217
 	}
182
 	}
218
 
183
 
219
 	@Override
184
 	@Override
220
-	public ReturnT<String> remove(int jobGroup, String jobName) {
221
-		XxlJobInfo xxlJobInfo = xxlJobInfoDao.load(jobGroup, jobName);
185
+	public ReturnT<String> remove(int id) {
186
+		XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
187
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
188
+        String name = String.valueOf(xxlJobInfo.getId());
222
 
189
 
223
 		try {
190
 		try {
224
-			XxlJobDynamicScheduler.removeJob(jobName, String.valueOf(jobGroup));
225
-			xxlJobInfoDao.delete(jobGroup, jobName);
226
-			xxlJobLogDao.delete(jobGroup, jobName);
227
-			xxlJobLogGlueDao.deleteByJobId(xxlJobInfo.getId());
191
+			XxlJobDynamicScheduler.removeJob(name, group);
192
+			xxlJobInfoDao.delete(id);
193
+			xxlJobLogDao.delete(id);
194
+			xxlJobLogGlueDao.deleteByJobId(id);
228
 			return ReturnT.SUCCESS;
195
 			return ReturnT.SUCCESS;
229
 		} catch (SchedulerException e) {
196
 		} catch (SchedulerException e) {
230
 			e.printStackTrace();
197
 			e.printStackTrace();
233
 	}
200
 	}
234
 
201
 
235
 	@Override
202
 	@Override
236
-	public ReturnT<String> pause(int jobGroup, String jobName) {
203
+	public ReturnT<String> pause(int id) {
204
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
205
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
206
+        String name = String.valueOf(xxlJobInfo.getId());
207
+
237
 		try {
208
 		try {
238
-			XxlJobDynamicScheduler.pauseJob(jobName, String.valueOf(jobGroup));	// jobStatus do not store
209
+			XxlJobDynamicScheduler.pauseJob(name, group);	// jobStatus do not store
239
 			return ReturnT.SUCCESS;
210
 			return ReturnT.SUCCESS;
240
 		} catch (SchedulerException e) {
211
 		} catch (SchedulerException e) {
241
 			e.printStackTrace();
212
 			e.printStackTrace();
244
 	}
215
 	}
245
 
216
 
246
 	@Override
217
 	@Override
247
-	public ReturnT<String> resume(int jobGroup, String jobName) {
218
+	public ReturnT<String> resume(int id) {
219
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
220
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
221
+        String name = String.valueOf(xxlJobInfo.getId());
222
+
248
 		try {
223
 		try {
249
-			XxlJobDynamicScheduler.resumeJob(jobName, String.valueOf(jobGroup));
250
-			return ReturnT.SUCCESS;
224
+			boolean ret = false;
225
+			if (XxlJobDynamicScheduler.checkExists(name, group)) {
226
+				ret = XxlJobDynamicScheduler.resumeJob(name, group);
227
+			} else {
228
+				ret = XxlJobDynamicScheduler.addJob(name, group, xxlJobInfo.getJobCron());
229
+			}
230
+			return ret?ReturnT.SUCCESS:ReturnT.FAIL;
251
 		} catch (SchedulerException e) {
231
 		} catch (SchedulerException e) {
252
 			e.printStackTrace();
232
 			e.printStackTrace();
253
 			return ReturnT.FAIL;
233
 			return ReturnT.FAIL;
255
 	}
235
 	}
256
 
236
 
257
 	@Override
237
 	@Override
258
-	public ReturnT<String> triggerJob(int jobGroup, String jobName) {
238
+	public ReturnT<String> triggerJob(int id) {
239
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
240
+        String group = String.valueOf(xxlJobInfo.getJobGroup());
241
+        String name = String.valueOf(xxlJobInfo.getId());
242
+
259
 		try {
243
 		try {
260
-			XxlJobDynamicScheduler.triggerJob(jobName, String.valueOf(jobGroup));
244
+			XxlJobDynamicScheduler.triggerJob(name, group);
261
 			return ReturnT.SUCCESS;
245
 			return ReturnT.SUCCESS;
262
 		} catch (SchedulerException e) {
246
 		} catch (SchedulerException e) {
263
 			e.printStackTrace();
247
 			e.printStackTrace();

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

7
 		<result column="id" property="id" />
7
 		<result column="id" property="id" />
8
 	
8
 	
9
 		<result column="job_group" property="jobGroup" />
9
 		<result column="job_group" property="jobGroup" />
10
-	    <result column="job_name" property="jobName" />
11
 	    <result column="job_cron" property="jobCron" />
10
 	    <result column="job_cron" property="jobCron" />
12
 	    <result column="job_desc" property="jobDesc" />
11
 	    <result column="job_desc" property="jobDesc" />
13
 	    
12
 	    
31
 	<sql id="Base_Column_List">
30
 	<sql id="Base_Column_List">
32
 		t.id,
31
 		t.id,
33
 		t.job_group,
32
 		t.job_group,
34
-		t.job_name,
35
 		t.job_cron,
33
 		t.job_cron,
36
 		t.job_desc,
34
 		t.job_desc,
37
 		t.add_time,
35
 		t.add_time,
74
 			</if>
72
 			</if>
75
 		</trim>
73
 		</trim>
76
 	</select>
74
 	</select>
77
-	
75
+
78
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
76
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
79
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_INFO (
77
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_INFO (
80
 			job_group,
78
 			job_group,
81
-			job_name,
82
 			job_cron,
79
 			job_cron,
83
 			job_desc,
80
 			job_desc,
84
 			add_time,
81
 			add_time,
93
 			glue_remark,
90
 			glue_remark,
94
 			child_jobkey
91
 			child_jobkey
95
 		) VALUES (
92
 		) VALUES (
96
-			#{jobGroup}, 
97
-			#{jobName}, 
93
+			#{jobGroup},
98
 			#{jobCron}, 
94
 			#{jobCron}, 
99
 			#{jobDesc},
95
 			#{jobDesc},
100
 			NOW(),
96
 			NOW(),
109
 			#{glueRemark},
105
 			#{glueRemark},
110
 			#{childJobKey}
106
 			#{childJobKey}
111
 		);
107
 		);
112
-		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
113
-			SELECT LAST_INSERT_ID() 
114
-		</selectKey> 
108
+		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
109
+			SELECT LAST_INSERT_ID()
110
+			/*SELECT @@IDENTITY AS id*/
111
+		</selectKey>-->
115
 	</insert>
112
 	</insert>
116
 
113
 
117
 	<select id="loadById" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
114
 	<select id="loadById" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
119
 		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
116
 		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
120
 		WHERE t.id = #{id}
117
 		WHERE t.id = #{id}
121
 	</select>
118
 	</select>
122
-
123
-	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
124
-		SELECT <include refid="Base_Column_List" />
125
-		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
126
-		WHERE t.job_group = #{jobGroup}
127
-			AND t.job_name = #{jobName}
128
-	</select>
129
 	
119
 	
130
 	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" >
120
 	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" >
131
 		UPDATE XXL_JOB_QRTZ_TRIGGER_INFO
121
 		UPDATE XXL_JOB_QRTZ_TRIGGER_INFO
142
 			glue_source = #{glueSource},
132
 			glue_source = #{glueSource},
143
 			glue_remark = #{glueRemark},
133
 			glue_remark = #{glueRemark},
144
 			child_jobkey = #{childJobKey}
134
 			child_jobkey = #{childJobKey}
145
-		WHERE job_group = #{jobGroup}
146
-			AND job_name = #{jobName}
135
+		WHERE id = #{id}
147
 	</update>
136
 	</update>
148
 	
137
 	
149
 	<delete id="delete" parameterType="java.util.HashMap">
138
 	<delete id="delete" parameterType="java.util.HashMap">
150
 		DELETE
139
 		DELETE
151
-		FROM
152
-			XXL_JOB_QRTZ_TRIGGER_INFO
153
-		WHERE
154
-			job_group = #{jobGroup}
155
-		AND job_name = #{jobName}
140
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO
141
+		WHERE id = #{id}
156
 	</delete>
142
 	</delete>
157
 
143
 
158
 	<select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
144
 	<select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">

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

5
 	
5
 	
6
 	<resultMap id="XxlJobLog" type="com.xxl.job.admin.core.model.XxlJobLog" >
6
 	<resultMap id="XxlJobLog" type="com.xxl.job.admin.core.model.XxlJobLog" >
7
 		<result column="id" property="id" />
7
 		<result column="id" property="id" />
8
-	
9
-	    <result column="job_group" property="jobGroup" />
10
-	    <result column="job_name" property="jobName" />
11
-	    
8
+
9
+		<result column="job_group" property="jobGroup" />
10
+		<result column="job_id" property="jobId" />
11
+
12
 	    <result column="executor_address" property="executorAddress" />
12
 	    <result column="executor_address" property="executorAddress" />
13
 		<result column="executor_handler" property="executorHandler" />
13
 		<result column="executor_handler" property="executorHandler" />
14
 	    <result column="executor_param" property="executorParam" />
14
 	    <result column="executor_param" property="executorParam" />
26
 	<sql id="Base_Column_List">
26
 	<sql id="Base_Column_List">
27
 		t.id,
27
 		t.id,
28
 		t.job_group,
28
 		t.job_group,
29
-		t.job_name,
29
+		t.job_id,
30
 		t.executor_address,
30
 		t.executor_address,
31
 		t.executor_handler,
31
 		t.executor_handler,
32
 		t.executor_param,
32
 		t.executor_param,
45
 			<if test="jobGroup != null and jobGroup != ''">
45
 			<if test="jobGroup != null and jobGroup != ''">
46
 				AND t.job_group = #{jobGroup}
46
 				AND t.job_group = #{jobGroup}
47
 			</if>
47
 			</if>
48
-			<if test="jobName != null and jobName != ''">
49
-				AND t.job_name = #{jobName}
48
+			<if test="jobId gt 0">
49
+				AND t.job_id = #{jobId}
50
 			</if>
50
 			</if>
51
 			<if test="triggerTimeStart != null">
51
 			<if test="triggerTimeStart != null">
52
 				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
52
 				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
66
 			<if test="jobGroup != null and jobGroup != ''">
66
 			<if test="jobGroup != null and jobGroup != ''">
67
 				AND t.job_group = #{jobGroup}
67
 				AND t.job_group = #{jobGroup}
68
 			</if>
68
 			</if>
69
-			<if test="jobName != null and jobName != ''">
70
-				AND t.job_name = #{jobName}
69
+			<if test="jobId gt 0">
70
+				AND t.job_id = #{jobId}
71
 			</if>
71
 			</if>
72
 			<if test="triggerTimeStart != null">
72
 			<if test="triggerTimeStart != null">
73
 				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
73
 				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
88
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
88
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
89
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
89
 		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
90
 			`job_group`,
90
 			`job_group`,
91
-			`job_name`,
91
+			`job_id`,
92
 			`executor_address`,
92
 			`executor_address`,
93
 			`executor_handler`,
93
 			`executor_handler`,
94
 			`executor_param`
94
 			`executor_param`
95
 		) VALUES (
95
 		) VALUES (
96
-			#{jobGroup}, 
97
-			#{jobName},
96
+			#{jobGroup},
97
+			#{jobId},
98
 			#{executorAddress},
98
 			#{executorAddress},
99
 			#{executorHandler},
99
 			#{executorHandler},
100
 			#{executorParam}
100
 			#{executorParam}
127
 	
127
 	
128
 	<delete id="delete">
128
 	<delete id="delete">
129
 		delete from XXL_JOB_QRTZ_TRIGGER_LOG
129
 		delete from XXL_JOB_QRTZ_TRIGGER_LOG
130
-		WHERE job_group = #{jobGroup}
131
-			AND job_name = #{jobName}
130
+		WHERE job_id = #{jobId}
132
 	</delete>
131
 	</delete>
133
 	
132
 	
134
 </mapper>
133
 </mapper>

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

51
                 <div class="col-xs-4">
51
                 <div class="col-xs-4">
52
                     <div class="input-group">
52
                     <div class="input-group">
53
                         <span class="input-group-addon">JobHandler</span>
53
                         <span class="input-group-addon">JobHandler</span>
54
-                        <input type="text" class="form-control" id="executorHandler" value="${jobName}" autocomplete="on" >
54
+                        <input type="text" class="form-control" id="executorHandler" autocomplete="on" >
55
                     </div>
55
                     </div>
56
                 </div>
56
                 </div>
57
 	            <div class="col-xs-2">
57
 	            <div class="col-xs-2">
74
 					            	<tr>
74
 					            	<tr>
75
 					            		<th name="id" >id</th>
75
 					            		<th name="id" >id</th>
76
 					                	<th name="jobGroup" >jobGroup</th>
76
 					                	<th name="jobGroup" >jobGroup</th>
77
-					                  	<th name="jobName" >jobName</th>
78
                                         <th name="childJobKey" >任务Key</th>
77
                                         <th name="childJobKey" >任务Key</th>
79
 					                  	<th name="jobDesc" >描述</th>
78
 					                  	<th name="jobDesc" >描述</th>
80
 					                  	<th name="jobCron" >Cron</th>
79
 					                  	<th name="jobCron" >Cron</th>

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

35
 	    		<div class="col-xs-3">
35
 	    		<div class="col-xs-3">
36
  					<div class="input-group">
36
  					<div class="input-group">
37
 	                	<span class="input-group-addon">执行器</span>
37
 	                	<span class="input-group-addon">执行器</span>
38
-                		<select class="form-control" id="jobGroup"  paramVal="${jobGroup}" >
39
-                            <option value="0" selected>请选择</option>
38
+                		<select class="form-control" id="jobGroup"  paramVal="<#if jobInfo?exists>${jobInfo.jobGroup}</#if>" >
39
+                            <option value="0" >请选择</option>
40
                 			<#list JobGroupList as group>
40
                 			<#list JobGroupList as group>
41
-                				<option value="${group.id}" <#if jobGroup == group.appName && false>selected</#if> >${group.title}</option>
41
+                				<option value="${group.id}" >${group.title}</option>
42
                 			</#list>
42
                 			</#list>
43
 	                  	</select>
43
 	                  	</select>
44
 	              	</div>
44
 	              	</div>
45
 	            </div>
45
 	            </div>
46
 	            <div class="col-xs-3">
46
 	            <div class="col-xs-3">
47
 	              	<div class="input-group">
47
 	              	<div class="input-group">
48
-	                	<span class="input-group-addon">描述</span>
49
-                        <select class="form-control" id="jobName" paramVal="${jobName}" >
50
-                            <option value="" >请选择</option>
48
+	                	<span class="input-group-addon">任务</span>
49
+                        <select class="form-control" id="jobId" paramVal="<#if jobInfo?exists>${jobInfo.id}</#if>" >
50
+                            <option value="0" >请选择</option>
51
 						</select>
51
 						</select>
52
 	              	</div>
52
 	              	</div>
53
 	            </div>
53
 	            </div>
76
 				                <thead>
76
 				                <thead>
77
 					            	<tr>
77
 					            	<tr>
78
 					                	<th name="id" >id</th>
78
 					                	<th name="id" >id</th>
79
-					                	<th name="jobGroup" >任务组</th>
80
-					                  	<th name="jobName" >任务名</th>
79
+                                        <th name="jobGroup" >执行器ID</th>
80
+					                	<th name="jobId" >任务ID</th>
81
 					                  	<th name="executorAddress" >执行器地址</th>
81
 					                  	<th name="executorAddress" >执行器地址</th>
82
                                         <th name="executorHandler" >JobHandler</th>
82
                                         <th name="executorHandler" >JobHandler</th>
83
 					                  	<th name="executorParam" >任务参数</th>
83
 					                  	<th name="executorParam" >任务参数</th>

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

34
 	            			return data;
34
 	            			return data;
35
 	            		}
35
 	            		}
36
             		},
36
             		},
37
-					{ "data": 'jobName', "visible" : false},
38
 					{
37
 					{
39
 						"data": 'childJobKey',
38
 						"data": 'childJobKey',
40
 						"visible" : true,
39
 						"visible" : true,
41
 						"render": function ( data, type, row ) {
40
 						"render": function ( data, type, row ) {
42
-							var jobKey = row.jobGroup + "_" + row.jobName;
41
+							var jobKey = row.jobGroup + "_" + row.id;
43
 							return jobKey;
42
 							return jobKey;
44
 						}
43
 						}
45
 					},
44
 					},
76
 	                	"render": function ( data, type, row ) {
75
 	                	"render": function ( data, type, row ) {
77
 	                		if ('NORMAL' == data) {
76
 	                		if ('NORMAL' == data) {
78
 	                			return '<small class="label label-success" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
77
 	                			return '<small class="label label-success" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
79
-							} else if ('PAUSED' == data){
78
+							} else if ('PAUSED' == data || 'NONE' == data){
80
 								return '<small class="label label-default" title="暂停" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
79
 								return '<small class="label label-default" title="暂停" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
81
 							} else if ('BLOCKED' == data){
80
 							} else if ('BLOCKED' == data){
82
 								return '<small class="label label-default" title="阻塞[串行]" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
81
 								return '<small class="label label-default" title="阻塞[串行]" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
91
 	                			var pause_resume = "";
90
 	                			var pause_resume = "";
92
 	                			if ('NORMAL' == row.jobStatus) {
91
 	                			if ('NORMAL' == row.jobStatus) {
93
 	                				pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
92
 	                				pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
94
-								} else if ('PAUSED' == row.jobStatus){
93
+								} else if ('PAUSED' == row.jobStatus || 'NONE' == row.jobStatus){
95
 									pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
94
 									pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
96
 								}
95
 								}
97
 	                			// log url
96
 	                			// log url
98
-	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
97
+	                			var logUrl = base_url +'/joblog?jobId='+ row.id;
99
 	                			
98
 	                			
100
 	                			// log url
99
 	                			// log url
101
 	                			var codeBtn = "";
100
 	                			var codeBtn = "";
107
 								// html
106
 								// html
108
 								var html = '<p id="'+ row.id +'" '+
107
 								var html = '<p id="'+ row.id +'" '+
109
 									' jobGroup="'+ row.jobGroup +'" '+
108
 									' jobGroup="'+ row.jobGroup +'" '+
110
-									' jobName="'+ row.jobName +'" '+
111
 									' jobCron="'+ row.jobCron +'" '+
109
 									' jobCron="'+ row.jobCron +'" '+
112
 									' jobDesc="'+ row.jobDesc +'" '+
110
 									' jobDesc="'+ row.jobDesc +'" '+
113
 									' author="'+ row.author +'" '+
111
 									' author="'+ row.author +'" '+
188
 			return;
186
 			return;
189
 		}
187
 		}
190
 		
188
 		
191
-		var jobGroup = $(this).parent('p').attr("jobGroup");
192
-		var jobName = $(this).parent('p').attr("jobName");
189
+		var id = $(this).parent('p').attr("id");
193
 		
190
 		
194
 		ComConfirm.show("确认" + typeName + "?", function(){
191
 		ComConfirm.show("确认" + typeName + "?", function(){
195
 			$.ajax({
192
 			$.ajax({
196
 				type : 'POST',
193
 				type : 'POST',
197
 				url : url,
194
 				url : url,
198
 				data : {
195
 				data : {
199
-					"jobGroup" : jobGroup,
200
-					"jobName"  : jobName
196
+					"id" : id
201
 				},
197
 				},
202
 				dataType : "json",
198
 				dataType : "json",
203
 				success : function(data){
199
 				success : function(data){

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

1
 $(function() {
1
 $(function() {
2
 
2
 
3
 	// 任务组列表选中, 任务列表初始化和选中
3
 	// 任务组列表选中, 任务列表初始化和选中
4
-    var ifParam = true;
5
 	$("#jobGroup").on("change", function () {
4
 	$("#jobGroup").on("change", function () {
6
 		var jobGroup = $(this).children('option:selected').val();
5
 		var jobGroup = $(this).children('option:selected').val();
7
 		$.ajax({
6
 		$.ajax({
8
 			type : 'POST',
7
 			type : 'POST',
9
-            async: false,   // async, avoid js invoke pagelist before jobName data init
8
+            async: false,   // async, avoid js invoke pagelist before jobId data init
10
 			url : base_url + '/joblog/getJobsByGroup',
9
 			url : base_url + '/joblog/getJobsByGroup',
11
 			data : {"jobGroup":jobGroup},
10
 			data : {"jobGroup":jobGroup},
12
 			dataType : "json",
11
 			dataType : "json",
13
 			success : function(data){
12
 			success : function(data){
14
 				if (data.code == 200) {
13
 				if (data.code == 200) {
15
-					$("#jobName").html('<option value="" >请选择</option>');
16
-                        $.each(data.content, function (n, value) {
17
-                        $("#jobName").append('<option value="' + value.jobName + '" >' + value.jobDesc + '</option>');
14
+					$("#jobId").html('<option value="" >请选择</option>');
15
+					$.each(data.content, function (n, value) {
16
+                        $("#jobId").append('<option value="' + value.id + '" >' + value.jobDesc + '</option>');
18
                     });
17
                     });
19
-                    if ($("#jobName").attr("paramVal")){
20
-                        $("#jobName").find("option[value='" + $("#jobName").attr("paramVal") + "']").attr("selected",true);
21
-                        $("#jobName").attr("paramVal")
18
+                    if ($("#jobId").attr("paramVal")){
19
+                        $("#jobId").find("option[value='" + $("#jobId").attr("paramVal") + "']").attr("selected",true);
22
                     }
20
                     }
23
 				} else {
21
 				} else {
24
 					ComAlertTec.show(data.msg);
22
 					ComAlertTec.show(data.msg);
29
 	if ($("#jobGroup").attr("paramVal")){
27
 	if ($("#jobGroup").attr("paramVal")){
30
 		$("#jobGroup").find("option[value='" + $("#jobGroup").attr("paramVal") + "']").attr("selected",true);
28
 		$("#jobGroup").find("option[value='" + $("#jobGroup").attr("paramVal") + "']").attr("selected",true);
31
         $("#jobGroup").change();
29
         $("#jobGroup").change();
32
-        $("#jobGroup").attr("")
33
 	}
30
 	}
34
 
31
 
35
 	// 过滤时间
32
 	// 过滤时间
70
 	        data : function ( d ) {
67
 	        data : function ( d ) {
71
 	        	var obj = {};
68
 	        	var obj = {};
72
 	        	obj.jobGroup = $('#jobGroup').val();
69
 	        	obj.jobGroup = $('#jobGroup').val();
73
-	        	obj.jobName = $('#jobName').val();
70
+	        	obj.jobId = $('#jobId').val();
74
 				obj.filterTime = $('#filterTime').val();
71
 				obj.filterTime = $('#filterTime').val();
75
 	        	obj.start = d.start;
72
 	        	obj.start = d.start;
76
 	        	obj.length = d.length;
73
 	        	obj.length = d.length;
82
 	    //"scrollX": false,
79
 	    //"scrollX": false,
83
 	    "columns": [
80
 	    "columns": [
84
 	                { "data": 'id', "bSortable": false, "visible" : false},
81
 	                { "data": 'id', "bSortable": false, "visible" : false},
85
-	                { 
86
-	                	"data": 'jobGroup', 
87
-	                	"visible" : false, 
88
-	                	"bSortable": false, 
89
-	                	"render": function ( data, type, row ) {
90
-	            			var groupMenu = $("#jobGroup").find("option");
91
-	            			for ( var index in $("#jobGroup").find("option")) {
92
-	            				if ($(groupMenu[index]).attr('value') == data) {
93
-									return $(groupMenu[index]).html();
94
-								}
95
-							}
96
-	            			return data;
97
-	            		}
98
-            		},
99
-	                { "data": 'jobName', "visible" : false},
82
+					{ "data": 'jobGroup', "visible" : false},
83
+	                { "data": 'jobId', "visible" : false},
100
 	                { "data": 'executorAddress', "visible" : true},
84
 	                { "data": 'executorAddress', "visible" : true},
101
 					{
85
 					{
102
 						"data": 'executorHandler',
86
 						"data": 'executorHandler',

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

29
 	@Test
29
 	@Test
30
 	public void save_load(){
30
 	public void save_load(){
31
 		XxlJobInfo info = new XxlJobInfo();
31
 		XxlJobInfo info = new XxlJobInfo();
32
-		info.setJobName("job_name");
32
+		info.setJobGroup(1);
33
 		info.setJobCron("jobCron");
33
 		info.setJobCron("jobCron");
34
 		int count = xxlJobInfoDao.save(info);
34
 		int count = xxlJobInfoDao.save(info);
35
 		System.out.println(count);
35
 		System.out.println(count);
36
 		System.out.println(info.getId());
36
 		System.out.println(info.getId());
37
-		
38
-		XxlJobInfo item = xxlJobInfoDao.load(0 ,"job_name");
37
+
38
+		XxlJobInfo item = xxlJobInfoDao.loadById(2);
39
 		System.out.println(item);
39
 		System.out.println(item);
40
 	}
40
 	}
41
 	
41
 	
42
 	@Test
42
 	@Test
43
 	public void update(){
43
 	public void update(){
44
-		XxlJobInfo item = xxlJobInfoDao.load(0 ,"job_name");
44
+		XxlJobInfo item = xxlJobInfoDao.loadById(2);
45
 		
45
 		
46
 		item.setJobCron("jobCron2");
46
 		item.setJobCron("jobCron2");
47
 		xxlJobInfoDao.update(item);
47
 		xxlJobInfoDao.update(item);

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

16
 
16
 
17
     /**
17
     /**
18
      * kill
18
      * kill
19
-     * @param jobGroup
20
-     * @param jobName
19
+     * @param jobId
21
      * @return
20
      * @return
22
      */
21
      */
23
-    public ReturnT<String> kill(String jobGroup, String jobName);
22
+    public ReturnT<String> kill(int jobId);
24
 
23
 
25
     /**
24
     /**
26
      * log
25
      * log

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

23
     }
23
     }
24
 
24
 
25
     @Override
25
     @Override
26
-    public ReturnT<String> kill(String jobGroup, String jobName) {
27
-
28
-        // generate jobKey
29
-        String jobKey = jobGroup.concat("_").concat(jobName);
30
-
26
+    public ReturnT<String> kill(int jobId) {
31
         // kill handlerThread, and create new one
27
         // kill handlerThread, and create new one
32
-        JobThread jobThread = XxlJobExecutor.loadJobThread(jobKey);
28
+        JobThread jobThread = XxlJobExecutor.loadJobThread(jobId);
33
 
29
 
34
         if (jobThread != null) {
30
         if (jobThread != null) {
35
             IJobHandler handler = jobThread.getHandler();
31
             IJobHandler handler = jobThread.getHandler();
36
             jobThread.toStop("人工手动终止");
32
             jobThread.toStop("人工手动终止");
37
             jobThread.interrupt();
33
             jobThread.interrupt();
38
-            XxlJobExecutor.removeJobThread(jobKey);
34
+            XxlJobExecutor.removeJobThread(jobId);
39
             return ReturnT.SUCCESS;
35
             return ReturnT.SUCCESS;
40
         }
36
         }
41
 
37
 
53
 
49
 
54
     @Override
50
     @Override
55
     public ReturnT<String> run(TriggerParam triggerParam) {
51
     public ReturnT<String> run(TriggerParam triggerParam) {
56
-        // generate jobKey
57
-        String jobKey = triggerParam.getJobGroup().concat("_").concat(triggerParam.getJobName());
58
-
59
         // load old thread
52
         // load old thread
60
-        JobThread jobThread = XxlJobExecutor.loadJobThread(jobKey);
53
+        JobThread jobThread = XxlJobExecutor.loadJobThread(triggerParam.getJobId());
61
 
54
 
62
         if (!triggerParam.isGlueSwitch()) {
55
         if (!triggerParam.isGlueSwitch()) {
63
             // bean model
56
             // bean model
65
             // valid handler instance
58
             // valid handler instance
66
             IJobHandler jobHandler = XxlJobExecutor.loadJobHandler(triggerParam.getExecutorHandler());
59
             IJobHandler jobHandler = XxlJobExecutor.loadJobHandler(triggerParam.getExecutorHandler());
67
             if (jobHandler==null) {
60
             if (jobHandler==null) {
68
-                return new ReturnT(ReturnT.FAIL_CODE, "job handler for jobKey=[" + jobKey + "] not found.");
61
+                return new ReturnT(ReturnT.FAIL_CODE, "job handler for JobId=[" + triggerParam.getJobId() + "] not found.");
69
             }
62
             }
70
 
63
 
71
             if (jobThread == null) {
64
             if (jobThread == null) {
72
-                jobThread = XxlJobExecutor.registJobThread(jobKey, jobHandler);
65
+                jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), jobHandler);
73
             } else {
66
             } else {
74
                 // job handler update, kill old job thread
67
                 // job handler update, kill old job thread
75
                 if (jobThread.getHandler() != jobHandler) {
68
                 if (jobThread.getHandler() != jobHandler) {
78
                     jobThread.interrupt();
71
                     jobThread.interrupt();
79
 
72
 
80
                     // new thread, with new job handler
73
                     // new thread, with new job handler
81
-                    jobThread = XxlJobExecutor.registJobThread(jobKey, jobHandler);
74
+                    jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), jobHandler);
82
                 }
75
                 }
83
             }
76
             }
84
         } else {
77
         } else {
86
 
79
 
87
             // valid glueloader
80
             // valid glueloader
88
             if (!GlueFactory.isActive()) {
81
             if (!GlueFactory.isActive()) {
89
-                return new ReturnT(ReturnT.FAIL_CODE, "glueLoader for jobKey=[" + jobKey + "] not found.");
82
+                return new ReturnT(ReturnT.FAIL_CODE, "glueLoader for JobId=[" + triggerParam.getJobId() + "] not found.");
90
             }
83
             }
91
 
84
 
92
             if (jobThread == null) {
85
             if (jobThread == null) {
93
-                jobThread = XxlJobExecutor.registJobThread(jobKey, new GlueJobHandler(triggerParam.getJobGroup(), triggerParam.getJobName()));
86
+                jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), new GlueJobHandler(triggerParam.getJobId()));
94
             } else {
87
             } else {
95
                 // job handler update, kill old job thread
88
                 // job handler update, kill old job thread
96
                 if (!(jobThread.getHandler() instanceof GlueJobHandler)) {
89
                 if (!(jobThread.getHandler() instanceof GlueJobHandler)) {
99
                     jobThread.interrupt();
92
                     jobThread.interrupt();
100
 
93
 
101
                     // new thread, with new job handler
94
                     // new thread, with new job handler
102
-                    jobThread = XxlJobExecutor.registJobThread(jobKey, new GlueJobHandler(triggerParam.getJobGroup(), triggerParam.getJobName()));
95
+                    jobThread = XxlJobExecutor.registJobThread(triggerParam.getJobId(), new GlueJobHandler(triggerParam.getJobId()));
103
                 }
96
                 }
104
             }
97
             }
105
         }
98
         }

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

9
 public class TriggerParam implements Serializable{
9
 public class TriggerParam implements Serializable{
10
     private static final long serialVersionUID = 42L;
10
     private static final long serialVersionUID = 42L;
11
 
11
 
12
-    private String action;
13
-
14
-    private String jobGroup;
15
-    private String jobName;
12
+    private int jobId;
16
 
13
 
17
     private String executorHandler;
14
     private String executorHandler;
18
     private String executorParams;
15
     private String executorParams;
19
 
16
 
20
     private boolean glueSwitch;
17
     private boolean glueSwitch;
21
 
18
 
22
-    private Set<String> logAddress;
23
     private int logId;
19
     private int logId;
24
     private long logDateTim;
20
     private long logDateTim;
25
 
21
 
26
-    public String getAction() {
27
-        return action;
28
-    }
29
-
30
-    public void setAction(String action) {
31
-        this.action = action;
32
-    }
33
-
34
-    public String getJobGroup() {
35
-        return jobGroup;
36
-    }
37
-
38
-    public void setJobGroup(String jobGroup) {
39
-        this.jobGroup = jobGroup;
40
-    }
22
+    private Set<String> logAddress;
41
 
23
 
42
-    public String getJobName() {
43
-        return jobName;
24
+    public int getJobId() {
25
+        return jobId;
44
     }
26
     }
45
 
27
 
46
-    public void setJobName(String jobName) {
47
-        this.jobName = jobName;
28
+    public void setJobId(int jobId) {
29
+        this.jobId = jobId;
48
     }
30
     }
49
 
31
 
50
     public String getExecutorHandler() {
32
     public String getExecutorHandler() {
71
         this.glueSwitch = glueSwitch;
53
         this.glueSwitch = glueSwitch;
72
     }
54
     }
73
 
55
 
74
-    public Set<String> getLogAddress() {
75
-        return logAddress;
76
-    }
77
-
78
-    public void setLogAddress(Set<String> logAddress) {
79
-        this.logAddress = logAddress;
80
-    }
81
-
82
     public int getLogId() {
56
     public int getLogId() {
83
         return logId;
57
         return logId;
84
     }
58
     }
95
         this.logDateTim = logDateTim;
69
         this.logDateTim = logDateTim;
96
     }
70
     }
97
 
71
 
98
-    @Override
99
-    public String toString() {
100
-        return "RequestModel{" +
101
-                ", action='" + action + '\'' +
102
-                ", jobGroup='" + jobGroup + '\'' +
103
-                ", jobName='" + jobName + '\'' +
104
-                ", executorHandler='" + executorHandler + '\'' +
105
-                ", executorParams='" + executorParams + '\'' +
106
-                ", glueSwitch=" + glueSwitch +
107
-                ", logAddress=" + logAddress +
108
-                ", logId=" + logId +
109
-                ", logDateTim=" + logDateTim +
110
-                '}';
72
+    public Set<String> getLogAddress() {
73
+        return logAddress;
74
+    }
75
+
76
+    public void setLogAddress(Set<String> logAddress) {
77
+        this.logAddress = logAddress;
111
     }
78
     }
112
 }
79
 }

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

61
 
61
 
62
         // job thread repository destory
62
         // job thread repository destory
63
         if (JobThreadRepository.size() > 0) {
63
         if (JobThreadRepository.size() > 0) {
64
-            for (Map.Entry<String, JobThread> item: JobThreadRepository.entrySet()) {
64
+            for (Map.Entry<Integer, JobThread> item: JobThreadRepository.entrySet()) {
65
                 JobThread jobThread = item.getValue();
65
                 JobThread jobThread = item.getValue();
66
                 jobThread.toStop("Web容器销毁终止");
66
                 jobThread.toStop("Web容器销毁终止");
67
                 jobThread.interrupt();
67
                 jobThread.interrupt();
114
     }
114
     }
115
 
115
 
116
     // ---------------------------------- job thread repository
116
     // ---------------------------------- job thread repository
117
-    private static ConcurrentHashMap<String, JobThread> JobThreadRepository = new ConcurrentHashMap<String, JobThread>();
118
-    public static JobThread registJobThread(String jobkey, IJobHandler handler){
117
+    private static ConcurrentHashMap<Integer, JobThread> JobThreadRepository = new ConcurrentHashMap<Integer, JobThread>();
118
+    public static JobThread registJobThread(int jobId, IJobHandler handler){
119
         JobThread jobThread = new JobThread(handler);
119
         JobThread jobThread = new JobThread(handler);
120
         jobThread.start();
120
         jobThread.start();
121
-        logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobkey:{}, handler:{}", new Object[]{jobkey, handler});
122
-        JobThreadRepository.put(jobkey, jobThread);	// putIfAbsent | oh my god, map's put method return the old value!!!
121
+        logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobId:{}, handler:{}", new Object[]{jobId, handler});
122
+        JobThreadRepository.put(jobId, jobThread);	// putIfAbsent | oh my god, map's put method return the old value!!!
123
         return jobThread;
123
         return jobThread;
124
     }
124
     }
125
-    public static JobThread loadJobThread(String jobKey){
126
-        JobThread jobThread = JobThreadRepository.get(jobKey);
125
+    public static JobThread loadJobThread(int jobId){
126
+        JobThread jobThread = JobThreadRepository.get(jobId);
127
         return jobThread;
127
         return jobThread;
128
     }
128
     }
129
-    public static void removeJobThread(String jobKey){
130
-        JobThreadRepository.remove(jobKey);
129
+    public static void removeJobThread(int jobId){
130
+        JobThreadRepository.remove(jobId);
131
     }
131
     }
132
 
132
 
133
 }
133
 }

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

112
 	
112
 	
113
 	// ----------------------------- load instance -----------------------------
113
 	// ----------------------------- load instance -----------------------------
114
 	// load new instance, prototype
114
 	// load new instance, prototype
115
-	public IJobHandler loadNewInstance(String job_group, String job_name) throws Exception{
116
-		if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) {
115
+	public IJobHandler loadNewInstance(int jobId) throws Exception{
116
+		if (jobId==0) {
117
 			return null;
117
 			return null;
118
 		}
118
 		}
119
-		String codeSource = glueLoader.load(job_group, job_name);
119
+		String codeSource = glueLoader.load(jobId);
120
 		if (codeSource!=null && codeSource.trim().length()>0) {
120
 		if (codeSource!=null && codeSource.trim().length()>0) {
121
 			Class<?> clazz = groovyClassLoader.parseClass(codeSource);
121
 			Class<?> clazz = groovyClassLoader.parseClass(codeSource);
122
 			if (clazz != null) {
122
 			if (clazz != null) {
136
 	}
136
 	}
137
 	
137
 	
138
 	// // load instance, singleton
138
 	// // load instance, singleton
139
-	private static String generateInstanceCacheKey(String job_group, String job_name){
140
-		return job_group.concat("_").concat(job_name).concat("_instance");
139
+	private static String generateInstanceCacheKey(int jobId){
140
+		return String.valueOf(jobId).concat("_instance");
141
 	}
141
 	}
142
-	public IJobHandler loadInstance(String job_group, String job_name) throws Exception{
143
-		if (job_group==null || job_group.trim().length()==0 || job_name==null || job_name.trim().length()==0) {
142
+	public IJobHandler loadInstance(int jobId) throws Exception{
143
+		if (jobId==0) {
144
 			return null;
144
 			return null;
145
 		}
145
 		}
146
-		String cacheInstanceKey = generateInstanceCacheKey(job_group, job_name);
146
+		String cacheInstanceKey = generateInstanceCacheKey(jobId);
147
 		Object cacheInstance = LocalCache.getInstance().get(cacheInstanceKey);
147
 		Object cacheInstance = LocalCache.getInstance().get(cacheInstanceKey);
148
 		if (cacheInstance!=null) {
148
 		if (cacheInstance!=null) {
149
 			if (!(cacheInstance instanceof IJobHandler)) {
149
 			if (!(cacheInstance instanceof IJobHandler)) {
152
 			}
152
 			}
153
 			return (IJobHandler) cacheInstance;
153
 			return (IJobHandler) cacheInstance;
154
 		}
154
 		}
155
-		Object instance = loadNewInstance(job_group, job_name);
155
+		Object instance = loadNewInstance(jobId);
156
 		if (instance!=null) {
156
 		if (instance!=null) {
157
 			if (!(instance instanceof IJobHandler)) {
157
 			if (!(instance instanceof IJobHandler)) {
158
 				throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadInstance error, "
158
 				throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadInstance error, "
167
 	}
167
 	}
168
 	
168
 	
169
 	// ----------------------------- util -----------------------------
169
 	// ----------------------------- util -----------------------------
170
-	public static void glue(String job_group, String job_name, String... params) throws Exception{
171
-		GlueFactory.glueFactory.loadInstance(job_group, job_name).execute(params);
170
+	public static void glue(int jobId, String... params) throws Exception{
171
+		GlueFactory.glueFactory.loadInstance(jobId).execute(params);
172
 	}
172
 	}
173
 	
173
 	
174
 }
174
 }

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

8
 
8
 
9
 	/**
9
 	/**
10
 	 * load code source by name, ensure every load is the latest.
10
 	 * load code source by name, ensure every load is the latest.
11
-	 * @param job_group
12
-	 * @param job_name
11
+	 * @param jobId
13
 	 * @return code source
12
 	 * @return code source
14
 	 */
13
 	 */
15
-	public String load(String job_group, String job_name);
14
+	public String load(int jobId);
16
 	
15
 	
17
 }
16
 }

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

18
     }
18
     }
19
 
19
 
20
     @Override
20
     @Override
21
-    public String load(String job_group, String job_name) {
22
-        String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE job_group = ? AND job_name = ?";
23
-        List<Map<String, Object>> result = DBUtil.query(dataSource, sql, new String[]{job_group, job_name});
21
+    public String load(int jobId) {
22
+        String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE id = ?";
23
+        List<Map<String, Object>> result = DBUtil.query(dataSource, sql, new Object[]{jobId});
24
         if (result!=null && result.size()==1 && result.get(0)!=null && result.get(0).get("glue_source")!=null ) {
24
         if (result!=null && result.size()==1 && result.get(0)!=null && result.get(0).get("glue_source")!=null ) {
25
             return (String) result.get(0).get("glue_source");
25
             return (String) result.get(0).get("glue_source");
26
         }
26
         }

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

9
  */
9
  */
10
 public class GlueJobHandler extends IJobHandler {
10
 public class GlueJobHandler extends IJobHandler {
11
 	
11
 	
12
-	private String job_group;
13
-	private String job_name;
14
-	public GlueJobHandler(String job_group, String job_name) {
15
-		this.job_group = job_group;
16
-		this.job_name = job_name;
12
+	private int jobId;
13
+	public GlueJobHandler(int jobId) {
14
+		this.jobId = jobId;
17
 	}
15
 	}
18
 
16
 
19
 	@Override
17
 	@Override
20
 	public void execute(String... params) throws Exception {
18
 	public void execute(String... params) throws Exception {
21
-		GlueFactory.glue(job_group, job_name, params);
19
+		GlueFactory.glue(jobId, params);
22
 	}
20
 	}
23
 
21
 
24
 }
22
 }