xueli.xue 9 лет назад
Родитель
Сommit
8a8d7a5caf
19 измененных файлов: 269 добавлений и 226 удалений
  1. 12 2
      README.md
  2. 8 6
      db/tables_xxl_job.sql
  3. 3 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
  4. 7 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
  5. 3 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/constant/Constants.java
  6. 5 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java
  7. 11 5
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java
  8. 2 2
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java
  9. 11 11
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
  10. 1 1
      xxl-job-admin/src/main/resources/log4j.properties
  11. 16 10
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
  12. 4 4
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
  13. 7 7
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
  14. 50 46
      xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
  15. 8 5
      xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
  16. 86 115
      xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
  17. 32 0
      xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
  18. 2 2
      xxl-job-executor-example/src/main/resources/log4j.xml
  19. 1 1
      xxl-job-executor-example/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml

+ 12 - 2
README.md Просмотреть файл

251
 - 2、执行器异步回调执行日志;
251
 - 2、执行器异步回调执行日志;
252
 - 3、【重要】在 “调度中心” 支持HA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;
252
 - 3、【重要】在 “调度中心” 支持HA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;
253
 
253
 
254
+#### 4.6 版本 V1.4.0 新特性
255
+- 1、任务依赖: 通过事件触发方式实现, 任务执行成功并回调SUCCESS时, 会主动触发一次依赖任务的调度;
256
+- 2、调度中心任务属性调整: jobName改为系统生成, 新增任务时不需要指定;
257
+- 3、问题修复:
258
+    - 1.1、执行器jetty关闭优化,解决一处可能导致jetty无法关闭的问题;
259
+    - 1.2、执行器任务终止时,执行队列回调优化,解决一处导致任务无法回调的问题;
260
+    - 1.3、调度中心中列表分页参数优化,解决一处因服务器限制post长度而引起的问题;
261
+    - 1.4、执行器Jobhandler注解优化,解决一处因事务代理导致的容器无法加载JobHandler的问题;
262
+    - 1.5、远程调度优化,禁用retry策略,解决一处可能导致重复调用的问题;
263
+
264
+
254
 #### 规划中
265
 #### 规划中
255
-- 1、任务终止时,任务队列中调度回调通过被终止的接口;
256
 - 2、任务执行规则自定义:假如前一个任务正在执行,后续调度执行规则支持自定义;
266
 - 2、任务执行规则自定义:假如前一个任务正在执行,后续调度执行规则支持自定义;
257
 		串行(默认,当前逻辑):后续调度入调度队列;
267
 		串行(默认,当前逻辑):后续调度入调度队列;
258
 		并行:后续调度并行执行;
268
 		并行:后续调度并行执行;
259
 		Pass:后续调度被Pass;
269
 		Pass:后续调度被Pass;
260
 - 3、兼容oracle;
270
 - 3、兼容oracle;
261
-- 4、任务依赖;
271
+

+ 8 - 6
db/tables_xxl_job.sql Просмотреть файл

143
     PRIMARY KEY (SCHED_NAME,LOCK_NAME)
143
     PRIMARY KEY (SCHED_NAME,LOCK_NAME)
144
 );
144
 );
145
 
145
 
146
-CREATE TABLE `xxl_job_qrtz_trigger_info` (
146
+
147
+
148
+CREATE TABLE XXL_JOB_QRTZ_TRIGGER_INFO (
147
   `id` int(11) NOT NULL AUTO_INCREMENT,
149
   `id` int(11) NOT NULL AUTO_INCREMENT,
148
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
150
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
149
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
151
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
162
   `glue_source` text COMMENT 'GLUE源代码',
164
   `glue_source` text COMMENT 'GLUE源代码',
163
   `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
165
   `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
164
   PRIMARY KEY (`id`)
166
   PRIMARY KEY (`id`)
165
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
167
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
166
 
168
 
167
-CREATE TABLE `xxl_job_qrtz_trigger_log` (
169
+CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOG (
168
   `id` int(11) NOT NULL AUTO_INCREMENT,
170
   `id` int(11) NOT NULL AUTO_INCREMENT,
169
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
171
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
170
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
172
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
181
   `handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
183
   `handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
182
   `handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
184
   `handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
183
   PRIMARY KEY (`id`)
185
   PRIMARY KEY (`id`)
184
-) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;
186
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
185
 
187
 
186
-CREATE TABLE `xxl_job_qrtz_trigger_logglue` (
188
+CREATE TABLE XXL_JOB_QRTZ_TRIGGER_LOGGLUE (
187
   `id` int(11) NOT NULL AUTO_INCREMENT,
189
   `id` int(11) NOT NULL AUTO_INCREMENT,
188
   `job_group` varchar(255) NOT NULL,
190
   `job_group` varchar(255) NOT NULL,
189
   `job_name` varchar(255) NOT NULL,
191
   `job_name` varchar(255) NOT NULL,
192
   `add_time` timestamp NULL DEFAULT NULL,
194
   `add_time` timestamp NULL DEFAULT NULL,
193
   `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
195
   `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
194
   PRIMARY KEY (`id`)
196
   PRIMARY KEY (`id`)
195
-) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
197
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
196
 
198
 
197
 
199
 
198
 
200
 

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java Просмотреть файл

35
 	@ResponseBody
35
 	@ResponseBody
36
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
36
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
37
 			@RequestParam(required = false, defaultValue = "10") int length,
37
 			@RequestParam(required = false, defaultValue = "10") int length,
38
-			String jobGroup, String jobName, String filterTime) {
38
+			String jobGroup, String jobDesc, String filterTime) {
39
 		
39
 		
40
-		return xxlJobService.pageList(start, length, jobGroup, jobName, filterTime);
40
+		return xxlJobService.pageList(start, length, jobGroup, jobDesc, filterTime);
41
 	}
41
 	}
42
 	
42
 	
43
 	@RequestMapping("/add")
43
 	@RequestMapping("/add")
47
 			String author, String alarmEmail, int alarmThreshold, 
47
 			String author, String alarmEmail, int alarmThreshold, 
48
 			int glueSwitch, String glueSource, String glueRemark) {
48
 			int glueSwitch, String glueSource, String glueRemark) {
49
 		
49
 		
50
-		return xxlJobService.add(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorHandler, executorParam,
50
+		return xxlJobService.add(jobGroup, jobCron, jobDesc, executorAddress, executorHandler, executorParam,
51
 				author, alarmEmail, alarmThreshold, glueSwitch, glueSource, glueRemark);
51
 				author, alarmEmail, alarmThreshold, glueSwitch, glueSource, glueRemark);
52
 	}
52
 	}
53
 	
53
 	

+ 7 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java Просмотреть файл

47
 		model.addAttribute("JobGroupList", JobGroupEnum.values());
47
 		model.addAttribute("JobGroupList", JobGroupEnum.values());
48
 		return "joblog/joblog.index";
48
 		return "joblog/joblog.index";
49
 	}
49
 	}
50
+
51
+	@RequestMapping("/getJobsByGroup")
52
+	@ResponseBody
53
+	public ReturnT<List<XxlJobLog>> listJobByGroup(String jobGroup){
54
+		List<XxlJobLog> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
55
+		return new ReturnT<List<XxlJobLog>>(list);
56
+	}
50
 	
57
 	
51
 	@RequestMapping("/pageList")
58
 	@RequestMapping("/pageList")
52
 	@ResponseBody
59
 	@ResponseBody

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/constant/Constants.java Просмотреть файл

7
 public class Constants {
7
 public class Constants {
8
 	
8
 	
9
 	public enum JobGroupEnum{
9
 	public enum JobGroupEnum{
10
-		DEFAULT("默认"),
11
-		WAIMAI("外卖"),
12
-		MOVIE("电影");
10
+		defaults("默认"),
11
+		waimai("外卖"),
12
+		movie("电影");
13
 		private String desc;
13
 		private String desc;
14
 		private JobGroupEnum(String desc){
14
 		private JobGroupEnum(String desc){
15
 			this.desc = desc;
15
 			this.desc = desc;

+ 5 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java Просмотреть файл

3
 import java.util.List;
3
 import java.util.List;
4
 
4
 
5
 import com.xxl.job.admin.core.model.XxlJobInfo;
5
 import com.xxl.job.admin.core.model.XxlJobInfo;
6
+import com.xxl.job.admin.core.model.XxlJobLog;
6
 
7
 
7
 
8
 
8
 /**
9
 /**
11
  */
12
  */
12
 public interface IXxlJobInfoDao {
13
 public interface IXxlJobInfoDao {
13
 
14
 
14
-	public List<XxlJobInfo> pageList(int offset, int pagesize, String jobGroup, String jobName);
15
-	public int pageListCount(int offset, int pagesize, String jobGroup, String jobName);
15
+	public List<XxlJobInfo> pageList(int offset, int pagesize, String jobGroup, String jobDesc);
16
+	public int pageListCount(int offset, int pagesize, String jobGroup, String jobDesc);
16
 	
17
 	
17
 	public int save(XxlJobInfo info);
18
 	public int save(XxlJobInfo info);
18
 	
19
 	
21
 	public int update(XxlJobInfo item);
22
 	public int update(XxlJobInfo item);
22
 	
23
 	
23
 	public int delete(String jobGroup, String jobName);
24
 	public int delete(String jobGroup, String jobName);
24
-	
25
+
26
+	public List<XxlJobLog> getJobsByGroup(String jobGroup);
25
 }
27
 }

+ 11 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java Просмотреть файл

5
 
5
 
6
 import javax.annotation.Resource;
6
 import javax.annotation.Resource;
7
 
7
 
8
+import com.xxl.job.admin.core.model.XxlJobLog;
8
 import org.mybatis.spring.SqlSessionTemplate;
9
 import org.mybatis.spring.SqlSessionTemplate;
9
 import org.springframework.stereotype.Repository;
10
 import org.springframework.stereotype.Repository;
10
 
11
 
22
 	public SqlSessionTemplate sqlSessionTemplate;
23
 	public SqlSessionTemplate sqlSessionTemplate;
23
 
24
 
24
 	@Override
25
 	@Override
25
-	public List<XxlJobInfo> pageList(int offset, int pagesize, String jobGroup, String jobName) {
26
+	public List<XxlJobInfo> pageList(int offset, int pagesize, String jobGroup, String jobDesc) {
26
 		HashMap<String, Object> params = new HashMap<String, Object>();
27
 		HashMap<String, Object> params = new HashMap<String, Object>();
27
 		params.put("offset", offset);
28
 		params.put("offset", offset);
28
 		params.put("pagesize", pagesize);
29
 		params.put("pagesize", pagesize);
29
 		params.put("jobGroup", jobGroup);
30
 		params.put("jobGroup", jobGroup);
30
-		params.put("jobName", jobName);
31
+		params.put("jobDesc", jobDesc);
31
 		
32
 		
32
 		return sqlSessionTemplate.selectList("XxlJobInfoMapper.pageList", params);
33
 		return sqlSessionTemplate.selectList("XxlJobInfoMapper.pageList", params);
33
 	}
34
 	}
34
 
35
 
35
 	@Override
36
 	@Override
36
-	public int pageListCount(int offset, int pagesize, String jobGroup, String jobName) {
37
+	public int pageListCount(int offset, int pagesize, String jobGroup, String jobDesc) {
37
 		HashMap<String, Object> params = new HashMap<String, Object>();
38
 		HashMap<String, Object> params = new HashMap<String, Object>();
38
 		params.put("offset", offset);
39
 		params.put("offset", offset);
39
 		params.put("pagesize", pagesize);
40
 		params.put("pagesize", pagesize);
40
 		params.put("jobGroup", jobGroup);
41
 		params.put("jobGroup", jobGroup);
41
-		params.put("jobName", jobName);
42
+		params.put("jobDesc", jobDesc);
42
 		
43
 		
43
 		return sqlSessionTemplate.selectOne("XxlJobInfoMapper.pageListCount", params);
44
 		return sqlSessionTemplate.selectOne("XxlJobInfoMapper.pageListCount", params);
44
 	}
45
 	}
70
 		
71
 		
71
 		return sqlSessionTemplate.update("XxlJobInfoMapper.delete", params);
72
 		return sqlSessionTemplate.update("XxlJobInfoMapper.delete", params);
72
 	}
73
 	}
73
-	
74
+
75
+	@Override
76
+	public List<XxlJobLog> getJobsByGroup(String jobGroup) {
77
+		return sqlSessionTemplate.selectList("XxlJobInfoMapper.getJobsByGroup", jobGroup);
78
+	}
79
+
74
 }
80
 }

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java Просмотреть файл

11
  */
11
  */
12
 public interface IXxlJobService {
12
 public interface IXxlJobService {
13
 	
13
 	
14
-	public Map<String, Object> pageList(int start, int length, String jobGroup, String jobName, String filterTime);
14
+	public Map<String, Object> pageList(int start, int length, String jobGroup, String jobDesc, String filterTime);
15
 	
15
 	
16
-	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc, 
16
+	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
17
 			String executorAddress,	String executorHandler, String executorParam, 
17
 			String executorAddress,	String executorHandler, String executorParam, 
18
 			String author, String alarmEmail, int alarmThreshold,
18
 			String author, String alarmEmail, int alarmThreshold,
19
 			int glueSwitch, String glueSource, String glueRemark);
19
 			int glueSwitch, String glueSource, String glueRemark);

+ 11 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java Просмотреть файл

3
 import java.util.HashMap;
3
 import java.util.HashMap;
4
 import java.util.List;
4
 import java.util.List;
5
 import java.util.Map;
5
 import java.util.Map;
6
+import java.util.UUID;
6
 
7
 
7
 import javax.annotation.Resource;
8
 import javax.annotation.Resource;
8
 
9
 
36
 	private IXxlJobLogGlueDao xxlJobLogGlueDao;
37
 	private IXxlJobLogGlueDao xxlJobLogGlueDao;
37
 	
38
 	
38
 	@Override
39
 	@Override
39
-	public Map<String, Object> pageList(int start, int length, String jobGroup, String jobName, String filterTime) {
40
+	public Map<String, Object> pageList(int start, int length, String jobGroup, String jobDesc, String filterTime) {
40
 		
41
 		
41
 		// page list
42
 		// page list
42
-		List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, jobName);
43
-		int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, jobName);
43
+		List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, jobDesc);
44
+		int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, jobDesc);
44
 		
45
 		
45
 		// fill job info
46
 		// fill job info
46
 		if (list!=null && list.size()>0) {
47
 		if (list!=null && list.size()>0) {
58
 	}
59
 	}
59
 
60
 
60
 	@Override
61
 	@Override
61
-	public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc, 
62
+	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
62
 			String executorAddress,	String executorHandler, String executorParam, 
63
 			String executorAddress,	String executorHandler, String executorParam, 
63
 			String author, String alarmEmail, int alarmThreshold,
64
 			String author, String alarmEmail, int alarmThreshold,
64
 			int glueSwitch, String glueSource, String glueRemark) {
65
 			int glueSwitch, String glueSource, String glueRemark) {
66
 		if (JobGroupEnum.match(jobGroup) == null) {
67
 		if (JobGroupEnum.match(jobGroup) == null) {
67
 			return new ReturnT<String>(500, "请选择“任务组”");
68
 			return new ReturnT<String>(500, "请选择“任务组”");
68
 		}
69
 		}
69
-		if (StringUtils.isBlank(jobName)) {
70
-			return new ReturnT<String>(500, "请输入“任务名”");
71
-		}
72
 		if (!CronExpression.isValidExpression(jobCron)) {
70
 		if (!CronExpression.isValidExpression(jobCron)) {
73
 			return new ReturnT<String>(500, "请输入格式正确的“Cron”");
71
 			return new ReturnT<String>(500, "请输入格式正确的“Cron”");
74
 		}
72
 		}
90
 		if (alarmThreshold < 0) {
88
 		if (alarmThreshold < 0) {
91
 			alarmThreshold = 0;
89
 			alarmThreshold = 0;
92
 		}
90
 		}
93
-		
91
+
92
+		// generate jobName
93
+		String jobName = UUID.randomUUID().toString();
94
 		try {
94
 		try {
95
 			if (DynamicSchedulerUtil.checkExists(jobName, jobGroup)) {
95
 			if (DynamicSchedulerUtil.checkExists(jobName, jobGroup)) {
96
 				return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
96
 				return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
99
 			e1.printStackTrace();
99
 			e1.printStackTrace();
100
 			return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
100
 			return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
101
 		}
101
 		}
102
-		
102
+
103
 		// Backup to the database
103
 		// Backup to the database
104
 		XxlJobInfo jobInfo = new XxlJobInfo();
104
 		XxlJobInfo jobInfo = new XxlJobInfo();
105
 		jobInfo.setJobGroup(jobGroup);
105
 		jobInfo.setJobGroup(jobGroup);
117
 		jobInfo.setExecutorHandler(executorHandler);
117
 		jobInfo.setExecutorHandler(executorHandler);
118
 		jobInfo.setExecutorParam(executorParam);
118
 		jobInfo.setExecutorParam(executorParam);
119
 		xxlJobInfoDao.save(jobInfo);
119
 		xxlJobInfoDao.save(jobInfo);
120
-		
120
+
121
 		try {
121
 		try {
122
 			// add job 2 quartz
122
 			// add job 2 quartz
123
 			boolean result = DynamicSchedulerUtil.addJob(jobInfo);
123
 			boolean result = DynamicSchedulerUtil.addJob(jobInfo);
168
 		}
168
 		}
169
 		
169
 		
170
 		XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
170
 		XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
171
-		jobInfo.setJobCron(jobCron);
172
 		jobInfo.setJobDesc(jobDesc);
171
 		jobInfo.setJobDesc(jobDesc);
172
+		jobInfo.setJobCron(jobCron);
173
 		jobInfo.setAuthor(author);
173
 		jobInfo.setAuthor(author);
174
 		jobInfo.setAlarmEmail(alarmEmail);
174
 		jobInfo.setAlarmEmail(alarmEmail);
175
 		jobInfo.setAlarmThreshold(alarmThreshold);
175
 		jobInfo.setAlarmThreshold(alarmThreshold);

+ 1 - 1
xxl-job-admin/src/main/resources/log4j.properties Просмотреть файл

5
 log4j.appender.console.layout.ConversionPattern=%d - xxl-job-admin - %p [%c] - <%m>%n
5
 log4j.appender.console.layout.ConversionPattern=%d - xxl-job-admin - %p [%c] - <%m>%n
6
 
6
 
7
 log4j.appender.logFile=org.apache.log4j.DailyRollingFileAppender
7
 log4j.appender.logFile=org.apache.log4j.DailyRollingFileAppender
8
-log4j.appender.logFile.File=${catalina.base}/logs/xxl-job-admin.log
8
+log4j.appender.logFile.File=/data/applogs/xxl-job/xxl-job-admin.log
9
 log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
9
 log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
10
 log4j.appender.logFile.layout.ConversionPattern=%d - xxl-job-admin - %p [%c] - <%m>%n
10
 log4j.appender.logFile.layout.ConversionPattern=%d - xxl-job-admin - %p [%c] - <%m>%n

+ 16 - 10
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml Просмотреть файл

50
 	
50
 	
51
 	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
51
 	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
52
 		SELECT <include refid="Base_Column_List" />
52
 		SELECT <include refid="Base_Column_List" />
53
-		FROM xxl_job_qrtz_trigger_info AS t
53
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
54
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
54
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
55
 			<if test="jobGroup != null and jobGroup != ''">
55
 			<if test="jobGroup != null and jobGroup != ''">
56
 				AND t.job_group = #{jobGroup}
56
 				AND t.job_group = #{jobGroup}
57
 			</if>
57
 			</if>
58
-			<if test="jobName != null and jobName != ''">
59
-				AND t.job_name like CONCAT(CONCAT('%', #{jobName}), '%')
58
+			<if test="jobDesc != null and jobDesc != ''">
59
+				AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
60
 			</if>
60
 			</if>
61
 		</trim>
61
 		</trim>
62
 		ORDER BY id DESC
62
 		ORDER BY id DESC
65
 	
65
 	
66
 	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
66
 	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
67
 		SELECT count(1)
67
 		SELECT count(1)
68
-		FROM xxl_job_qrtz_trigger_info AS t
68
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
69
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
69
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
70
 			<if test="jobGroup != null and jobGroup != ''">
70
 			<if test="jobGroup != null and jobGroup != ''">
71
 				AND t.job_group = #{jobGroup}
71
 				AND t.job_group = #{jobGroup}
72
 			</if>
72
 			</if>
73
-			<if test="jobName != null and jobName != ''">
74
-				AND t.job_name like CONCAT(CONCAT('%', #{jobName}), '%')
73
+			<if test="jobDesc != null and jobDesc != ''">
74
+				AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
75
 			</if>
75
 			</if>
76
 		</trim>
76
 		</trim>
77
 	</select>
77
 	</select>
78
 	
78
 	
79
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
79
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
80
-		INSERT INTO `xxl_job_qrtz_trigger_info` (
80
+		INSERT INTO XXL_JOB_QRTZ_TRIGGER_INFO (
81
 			job_group,
81
 			job_group,
82
 			job_name,
82
 			job_name,
83
 			job_cron,
83
 			job_cron,
119
 	
119
 	
120
 	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
120
 	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
121
 		SELECT <include refid="Base_Column_List" />
121
 		SELECT <include refid="Base_Column_List" />
122
-		FROM xxl_job_qrtz_trigger_info AS t
122
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
123
 		WHERE t.job_group = #{jobGroup}
123
 		WHERE t.job_group = #{jobGroup}
124
 			AND t.job_name = #{jobName}
124
 			AND t.job_name = #{jobName}
125
 	</select>
125
 	</select>
126
 	
126
 	
127
 	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" >
127
 	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" >
128
-		UPDATE `xxl_job_qrtz_trigger_info` 
128
+		UPDATE XXL_JOB_QRTZ_TRIGGER_INFO
129
 		SET 
129
 		SET 
130
 			job_cron = #{jobCron},
130
 			job_cron = #{jobCron},
131
 			job_desc = #{jobDesc},
131
 			job_desc = #{jobDesc},
146
 	<delete id="delete" parameterType="java.lang.String">
146
 	<delete id="delete" parameterType="java.lang.String">
147
 		DELETE
147
 		DELETE
148
 		FROM
148
 		FROM
149
-			xxl_job_qrtz_trigger_info
149
+			XXL_JOB_QRTZ_TRIGGER_INFO
150
 		WHERE
150
 		WHERE
151
 			job_group = #{jobGroup}
151
 			job_group = #{jobGroup}
152
 		AND job_name = #{jobName}
152
 		AND job_name = #{jobName}
153
 	</delete>
153
 	</delete>
154
+
155
+	<select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
156
+		SELECT <include refid="Base_Column_List" />
157
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
158
+		WHERE t.job_group = #{jobGroup}
159
+	</select>
154
 	
160
 	
155
 </mapper>
161
 </mapper>

+ 4 - 4
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml Просмотреть файл

46
 	
46
 	
47
 	<select id="selectList" parameterType="java.util.HashMap" resultMap="XxlJobLogGlue">
47
 	<select id="selectList" parameterType="java.util.HashMap" resultMap="XxlJobLogGlue">
48
 		SELECT <include refid="Base_Column_List" />
48
 		SELECT <include refid="Base_Column_List" />
49
-		FROM xxl_job_qrtz_trigger_logglue AS t
49
+		FROM XXL_JOB_QRTZ_TRIGGER_LOGGLUE AS t
50
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
50
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
51
 			<if test="jobGroup != null and jobGroup != ''">
51
 			<if test="jobGroup != null and jobGroup != ''">
52
 				AND t.job_group = #{jobGroup}
52
 				AND t.job_group = #{jobGroup}
59
 	</select>
59
 	</select>
60
 	
60
 	
61
 	<delete id="removeOld" parameterType="java.util.HashMap" >
61
 	<delete id="removeOld" parameterType="java.util.HashMap" >
62
-		DELETE FROM xxl_job_qrtz_trigger_logglue
62
+		DELETE FROM XXL_JOB_QRTZ_TRIGGER_LOGGLUE
63
 		WHERE id NOT in(
63
 		WHERE id NOT in(
64
 			SELECT id FROM(
64
 			SELECT id FROM(
65
-				SELECT id FROM xxl_job_qrtz_trigger_logglue
65
+				SELECT id FROM XXL_JOB_QRTZ_TRIGGER_LOGGLUE
66
 				WHERE `job_group` = #{jobGroup} and `job_name` = #{jobName}
66
 				WHERE `job_group` = #{jobGroup} and `job_name` = #{jobName}
67
 				ORDER BY update_time desc
67
 				ORDER BY update_time desc
68
 				LIMIT 0, #{limit}
68
 				LIMIT 0, #{limit}
71
 	</delete>
71
 	</delete>
72
 	
72
 	
73
 	<delete id="delete" parameterType="java.util.HashMap" >
73
 	<delete id="delete" parameterType="java.util.HashMap" >
74
-		DELETE FROM xxl_job_qrtz_trigger_logglue
74
+		DELETE FROM XXL_JOB_QRTZ_TRIGGER_LOGGLUE
75
 		WHERE job_group = #{jobGroup} and job_name = #{jobName}
75
 		WHERE job_group = #{jobGroup} and job_name = #{jobName}
76
 	</delete>
76
 	</delete>
77
 	
77
 	

+ 7 - 7
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml Просмотреть файл

67
 	
67
 	
68
 	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
68
 	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
69
 		SELECT count(1)
69
 		SELECT count(1)
70
-		FROM xxl_job_qrtz_trigger_log AS t
70
+		FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
71
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
71
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
72
 			<if test="jobGroup != null and jobGroup != ''">
72
 			<if test="jobGroup != null and jobGroup != ''">
73
 				AND t.job_group = #{jobGroup}
73
 				AND t.job_group = #{jobGroup}
86
 	
86
 	
87
 	<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobLog">
87
 	<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobLog">
88
 		SELECT <include refid="Base_Column_List" />
88
 		SELECT <include refid="Base_Column_List" />
89
-		FROM xxl_job_qrtz_trigger_log AS t
89
+		FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
90
 		WHERE t.id = #{id}
90
 		WHERE t.id = #{id}
91
 	</select>
91
 	</select>
92
 	
92
 	
93
 	<select id="loadByGroupAndName" parameterType="java.util.HashMap" resultMap="XxlJobLog">
93
 	<select id="loadByGroupAndName" parameterType="java.util.HashMap" resultMap="XxlJobLog">
94
 		SELECT <include refid="Base_Column_List" />
94
 		SELECT <include refid="Base_Column_List" />
95
-		FROM xxl_job_qrtz_trigger_log AS t
95
+		FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
96
 		WHERE t.job_group = #{jobGroup}
96
 		WHERE t.job_group = #{jobGroup}
97
 			AND t.job_name = #{jobName}
97
 			AND t.job_name = #{jobName}
98
 	</select>
98
 	</select>
99
 	
99
 	
100
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
100
 	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
101
-		INSERT INTO `xxl_job_qrtz_trigger_log` (
101
+		INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
102
 			`job_group`,
102
 			`job_group`,
103
 			`job_name`,
103
 			`job_name`,
104
 			`job_cron`, 
104
 			`job_cron`, 
123
 	</insert>
123
 	</insert>
124
 	
124
 	
125
 	<update id="updateTriggerInfo">
125
 	<update id="updateTriggerInfo">
126
-		UPDATE `xxl_job_qrtz_trigger_log` 
126
+		UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
127
 		SET 
127
 		SET 
128
 			`trigger_time`= #{triggerTime}, 
128
 			`trigger_time`= #{triggerTime}, 
129
 			`trigger_status`= #{triggerStatus}, 
129
 			`trigger_status`= #{triggerStatus}, 
135
 	</update>
135
 	</update>
136
 	
136
 	
137
 	<update id="updateHandleInfo">
137
 	<update id="updateHandleInfo">
138
-		UPDATE `xxl_job_qrtz_trigger_log` 
138
+		UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
139
 		SET 
139
 		SET 
140
 			`handle_time`= #{handleTime}, 
140
 			`handle_time`= #{handleTime}, 
141
 			`handle_status`= #{handleStatus}, 
141
 			`handle_status`= #{handleStatus}, 
144
 	</update>
144
 	</update>
145
 	
145
 	
146
 	<delete id="delete">
146
 	<delete id="delete">
147
-		delete from `xxl_job_qrtz_trigger_log` 
147
+		delete from XXL_JOB_QRTZ_TRIGGER_LOG
148
 		WHERE job_group = #{jobGroup}
148
 		WHERE job_group = #{jobGroup}
149
 			AND job_name = #{jobName}
149
 			AND job_name = #{jobName}
150
 	</delete>
150
 	</delete>

+ 50 - 46
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl Просмотреть файл

34
 	    	<div class="row">
34
 	    	<div class="row">
35
 	    		<div class="col-xs-4">
35
 	    		<div class="col-xs-4">
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" >
38
                 		<select class="form-control" id="jobGroup" >
39
                 			<#list JobGroupList as group>
39
                 			<#list JobGroupList as group>
40
                 				<option value="${group}" >${group.desc}</option>
40
                 				<option value="${group}" >${group.desc}</option>
44
 	            </div>
44
 	            </div>
45
 	            <div class="col-xs-4">
45
 	            <div class="col-xs-4">
46
 	              	<div class="input-group">
46
 	              	<div class="input-group">
47
-	                	<span class="input-group-addon">任务名</span>
48
-	                	<input type="text" class="form-control" id="jobName" value="${jobName}" autocomplete="on" >
47
+	                	<span class="input-group-addon">名</span>
48
+	                	<input type="text" class="form-control" id="jobDesc" value="${jobName}" autocomplete="on" >
49
 	              	</div>
49
 	              	</div>
50
 	            </div>
50
 	            </div>
51
 	            <div class="col-xs-2">
51
 	            <div class="col-xs-2">
67
 				                <thead>
67
 				                <thead>
68
 					            	<tr>
68
 					            	<tr>
69
 					            		<th name="id" >id</th>
69
 					            		<th name="id" >id</th>
70
-					                	<th name="jobGroup" >任务组</th>
71
-					                  	<th name="jobName" >任务名</th>
72
-					                  	<th name="jobDesc" >描述</th>
70
+					                	<th name="jobGroup" >jobGroup</th>
71
+					                  	<th name="jobName" >jobName</th>
72
+					                  	<th name="jobDesc" >名称</th>
73
 					                  	<th name="jobCron" >Cron</th>
73
 					                  	<th name="jobCron" >Cron</th>
74
 					                  	<th name="jobClass" >JobBean</th>
74
 					                  	<th name="jobClass" >JobBean</th>
75
 					                  	<th name="executorAddress" >执行器地址</th>
75
 					                  	<th name="executorAddress" >执行器地址</th>
104
 	<div class="modal-dialog modal-lg">
104
 	<div class="modal-dialog modal-lg">
105
 		<div class="modal-content">
105
 		<div class="modal-content">
106
 			<div class="modal-header">
106
 			<div class="modal-header">
107
-            	<h4 class="modal-title" >新增任务调度信息</h4>
107
+            	<h4 class="modal-title" >新增任务</h4>
108
          	</div>
108
          	</div>
109
          	<div class="modal-body">
109
          	<div class="modal-body">
110
 				<form class="form-horizontal form" role="form" >
110
 				<form class="form-horizontal form" role="form" >
111
 					<div class="form-group">
111
 					<div class="form-group">
112
-						<label for="firstname" class="col-sm-2 control-label">任务组<font color="red">*</font></label>
112
+						<label for="firstname" class="col-sm-2 control-label">组<font color="red">*</font></label>
113
 						<div class="col-sm-4">
113
 						<div class="col-sm-4">
114
 							<select class="form-control" name="jobGroup" >
114
 							<select class="form-control" name="jobGroup" >
115
 		            			<#list JobGroupList as group>
115
 		            			<#list JobGroupList as group>
117
 		            			</#list>
117
 		            			</#list>
118
 		                  	</select>
118
 		                  	</select>
119
 						</div>
119
 						</div>
120
-						<label for="firstname" class="col-sm-2 control-label">任务名<font color="red">*</font></label>
121
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobName" placeholder="请输入“任务名”" minlength="4" maxlength="100" ></div>
120
+                        <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
121
+                        <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
122
 					</div>
122
 					</div>
123
 					<div class="form-group">
123
 					<div class="form-group">
124
-						<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
125
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="100" ></div>
126
-						<label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
127
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="200" ></div>
128
-					</div>
129
-					<div class="form-group">
130
-						<label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
131
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="200" ></div>
132
-						<label for="lastname" class="col-sm-2 control-label">jobHandler<font color="red">*</font></label>
133
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="请输入“jobHandler”" maxlength="200" ></div>
124
+                        <label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
125
+                        <div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
126
+                        <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
127
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
134
 					</div>
128
 					</div>
135
 					<div class="form-group">
129
 					<div class="form-group">
136
-						<label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
137
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
138
-						<label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
139
-						<div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="200" ></div>
130
+						<label for="lastname" class="col-sm-2 control-label">JobHandler<font color="red">*</font></label>
131
+						<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="请输入“jobHandler”" maxlength="50" ></div>
132
+                        <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
133
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
140
 					</div>
134
 					</div>
141
 					<div class="form-group">
135
 					<div class="form-group">
142
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
136
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
143
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="200" ></div>
137
+						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
144
 						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
138
 						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
145
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
139
+						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
146
 					</div>
140
 					</div>
141
+                    <div class="form-group">
142
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
143
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
144
+                    </div>
147
 					<div class="form-group">
145
 					<div class="form-group">
148
 						<div class="col-sm-offset-3 col-sm-6">
146
 						<div class="col-sm-offset-3 col-sm-6">
149
 							<button type="submit" class="btn btn-primary"  >保存</button>
147
 							<button type="submit" class="btn btn-primary"  >保存</button>
190
 	<div class="modal-dialog modal-lg">
188
 	<div class="modal-dialog modal-lg">
191
 		<div class="modal-content">
189
 		<div class="modal-content">
192
 			<div class="modal-header">
190
 			<div class="modal-header">
193
-            	<h4 class="modal-title" >更新任务调度信息</h4>
191
+            	<h4 class="modal-title" >更新任务</h4>
194
          	</div>
192
          	</div>
195
          	<div class="modal-body">
193
          	<div class="modal-body">
196
 				<form class="form-horizontal form" role="form" >
194
 				<form class="form-horizontal form" role="form" >
197
 					<div class="form-group">
195
 					<div class="form-group">
198
-						<label for="firstname" class="col-sm-2 control-label">任务组<font color="red">*</font></label>
199
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobGroup" placeholder="请输入“任务组”" minlength="4" maxlength="100" readonly ></div>
200
-						<label for="firstname" class="col-sm-2 control-label">任务名<font color="red">*</font></label>
201
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobName" placeholder="请输入“任务名”" minlength="4" maxlength="100" readonly ></div>
196
+                        <label for="firstname" class="col-sm-2 control-label">分组<font color="red">*</font></label>
197
+                        <div class="col-sm-4">
198
+                            <select class="form-control" name="jobGroupTitle"  disabled>
199
+							<#list JobGroupList as group>
200
+                                <option value="${group}" >${group.desc}</option>
201
+							</#list>
202
+                            </select>
203
+                            <input type="hidden" name="jobGroup" >
204
+                            <input type="hidden" name="jobName" >
205
+                        </div>
206
+                        <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
207
+                        <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
202
 					</div>
208
 					</div>
203
 					<div class="form-group">
209
 					<div class="form-group">
204
 						<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
210
 						<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
205
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="100" ></div>
206
-						<label for="lastname" class="col-sm-2 control-label">描述<font color="red">*</font></label>
207
-						<div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="200" ></div>
211
+						<div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
212
+                        <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
213
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
208
 					</div>
214
 					</div>
209
 					
215
 					
210
 					<div class="form-group">
216
 					<div class="form-group">
211
-						<label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
212
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="200" ></div>
213
-						<label for="lastname" class="col-sm-2 control-label">jobHandler<font color="red">*</font></label>
214
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="请输入“jobHandler”" maxlength="200" ></div>
215
-					</div>
216
-					<div class="form-group">
217
-						<label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
218
-						<div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
219
-						<label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
220
-						<div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="200" ></div>
217
+						<label for="lastname" class="col-sm-2 control-label">JobHandler<font color="red">*</font></label>
218
+						<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="请输入“jobHandler”" maxlength="50" ></div>
219
+                        <label for="firstname" class="col-sm-2 control-label">执行参数<font color="black">*</font></label>
220
+                        <div class="col-sm-4"><input type="text" class="form-control" name="executorParam" placeholder="请输入“执行参数”" maxlength="100" ></div>
221
 					</div>
221
 					</div>
222
 					<div class="form-group">
222
 					<div class="form-group">
223
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
223
 						<label for="lastname" class="col-sm-2 control-label">报警邮件<font color="red">*</font></label>
224
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="200" ></div>
224
+						<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="请输入“报警邮件”,多个邮件地址逗号分隔" maxlength="100" ></div>
225
 						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
225
 						<label for="lastname" class="col-sm-2 control-label">报警阈值<font color="red">*</font></label>
226
-						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
226
+						<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="5" ></div>
227
 					</div>
227
 					</div>
228
+                    <div class="form-group">
229
+                        <label for="lastname" class="col-sm-2 control-label">负责人<font color="red">*</font></label>
230
+                        <div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="请输入“负责人”" maxlength="50" ></div>
231
+                    </div>
228
 					<div class="form-group">
232
 					<div class="form-group">
229
 						<div class="col-sm-offset-3 col-sm-6">
233
 						<div class="col-sm-offset-3 col-sm-6">
230
 							<button type="submit" class="btn btn-primary"  >保存</button>
234
 							<button type="submit" class="btn btn-primary"  >保存</button>

+ 8 - 5
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl Просмотреть файл

34
 	    	<div class="row">
34
 	    	<div class="row">
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>
38
-                		<select class="form-control" id="jobGroup" >
37
+	                	<span class="input-group-addon">分组</span>
38
+                		<select class="form-control" id="jobGroup"  paramVal="${jobGroup}" >
39
+                            <option value="" selected>请选择</option>
39
                 			<#list JobGroupList as group>
40
                 			<#list JobGroupList as group>
40
-                				<option value="${group}" <#if jobGroup == group>selected</#if> >${group.desc}</option>
41
+                				<option value="${group}" <#if jobGroup == group && false>selected</#if> >${group.desc}</option>
41
                 			</#list>
42
                 			</#list>
42
 	                  	</select>
43
 	                  	</select>
43
 	              	</div>
44
 	              	</div>
44
 	            </div>
45
 	            </div>
45
 	            <div class="col-xs-3">
46
 	            <div class="col-xs-3">
46
 	              	<div class="input-group">
47
 	              	<div class="input-group">
47
-	                	<span class="input-group-addon">任务名</span>
48
-	                	<input type="text" class="form-control" id="jobName" value="${jobName}" autocomplete="on" >
48
+	                	<span class="input-group-addon">名称</span>
49
+                        <select class="form-control" id="jobName" paramVal="${jobName}" >
50
+                            <option value="" >请选择</option>
51
+						</select>
49
 	              	</div>
52
 	              	</div>
50
 	            </div>
53
 	            </div>
51
 	            <div class="col-xs-4">
54
 	            <div class="col-xs-4">

+ 86 - 115
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js Просмотреть файл

6
 	    "serverSide": true,
6
 	    "serverSide": true,
7
 		"ajax": {
7
 		"ajax": {
8
 			url: base_url + "/jobinfo/pageList",
8
 			url: base_url + "/jobinfo/pageList",
9
+			type:"post",
9
 	        data : function ( d ) {
10
 	        data : function ( d ) {
10
 	        	var obj = {};
11
 	        	var obj = {};
11
 	        	obj.jobGroup = $('#jobGroup').val();
12
 	        	obj.jobGroup = $('#jobGroup').val();
12
-	        	obj.jobName = $('#jobName').val();
13
+	        	obj.jobDesc = $('#jobDesc').val();
13
 	        	obj.start = d.start;
14
 	        	obj.start = d.start;
14
 	        	obj.length = d.length;
15
 	        	obj.length = d.length;
15
                 return obj;
16
                 return obj;
33
 	            			return data;
34
 	            			return data;
34
 	            		}
35
 	            		}
35
             		},
36
             		},
36
-	                { "data": 'jobName'},
37
+	                { "data": 'jobName', "visible" : false},
37
 	                { "data": 'jobDesc', "visible" : true},
38
 	                { "data": 'jobDesc', "visible" : true},
38
 	                { "data": 'jobCron', "visible" : true},
39
 	                { "data": 'jobCron', "visible" : true},
39
 	                { "data": 'jobClass', "visible" : false},
40
 	                { "data": 'jobClass', "visible" : false},
98
 	                							' jobCron="'+ row.jobCron +'" '+
99
 	                							' jobCron="'+ row.jobCron +'" '+
99
 	                							' jobDesc="'+ row.jobDesc +'" '+
100
 	                							' jobDesc="'+ row.jobDesc +'" '+
100
 	                							' jobClass="'+ row.jobClass +'" '+
101
 	                							' jobClass="'+ row.jobClass +'" '+
101
-	                							' jobData="'+ row.jobData +'" '+
102
 	                							' executorAddress="'+row.executorAddress +'" '+
102
 	                							' executorAddress="'+row.executorAddress +'" '+
103
 	                							' executorHandler="'+ row.executorHandler +'" '+
103
 	                							' executorHandler="'+ row.executorHandler +'" '+
104
 	                							' executorParam="'+ row.executorParam +'" '+
104
 	                							' executorParam="'+ row.executorParam +'" '+
214
 		errorElement : 'span',  
214
 		errorElement : 'span',  
215
         errorClass : 'help-block',
215
         errorClass : 'help-block',
216
         focusInvalid : true,  
216
         focusInvalid : true,  
217
-        rules : {  
218
-        	jobName : {  
219
-        		required : true ,
220
-                minlength: 4,
221
-                maxlength: 100,
222
-                myValid01:true
223
-            },  
224
-            jobCron : {  
225
-            	required : true ,
226
-                maxlength: 100
227
-            },  
228
-            jobDesc : {  
229
-            	required : true ,
230
-                maxlength: 200
217
+        rules : {
218
+			jobDesc : {
219
+				required : true,
220
+				maxlength: 50
221
+			},
222
+            jobCron : {
223
+            	required : true
231
             },
224
             },
232
             executorAddress : {
225
             executorAddress : {
233
-            	required : true ,
234
-                maxlength: 200
226
+            	required : true
235
             },
227
             },
236
             executorHandler : {
228
             executorHandler : {
237
-            	required : true ,
238
-                maxlength: 200
239
-            },
240
-            author : {
241
-            	required : true ,
242
-                maxlength: 200
229
+            	required : true
243
             },
230
             },
244
             alarmEmail : {
231
             alarmEmail : {
245
-            	required : true ,
246
-                maxlength: 200
232
+            	required : true
247
             },
233
             },
248
             alarmThreshold : {
234
             alarmThreshold : {
249
             	required : true ,
235
             	required : true ,
250
             	digits:true
236
             	digits:true
251
-            }
237
+            },
238
+			author : {
239
+				required : true
240
+			}
252
         }, 
241
         }, 
253
         messages : {  
242
         messages : {  
254
-        	jobName : {  
255
-        		required :"请输入“任务名”"  ,
256
-                minlength:"“任务名”长度不应低于4位",
257
-                maxlength:"“任务名”长度不应超过100位"
258
-            },  
259
-            jobCron : {
260
-            	required :"请输入“Cron”."  ,
261
-                maxlength:"“Cron”长度不应超过100位"
262
-            },  
263
             jobDesc : {
243
             jobDesc : {
264
-            	required :"请输入“任务描述”."  ,
265
-                maxlength:"“任务描述”长度不应超过200位"
266
-            },  
244
+            	required :"请输入“名称”."
245
+            },
246
+            jobCron : {
247
+            	required :"请输入“Cron”."
248
+            },
267
             executorAddress : {
249
             executorAddress : {
268
-            	required :"请输入“执行器地址”."  ,
269
-                maxlength:"“执行器地址”长度不应超过200位"
250
+            	required :"请输入“执行器地址”."
270
             },
251
             },
271
             executorHandler : {
252
             executorHandler : {
272
-            	required : "请输入“jobHandler”."  ,
273
-                maxlength: "“jobHandler”长度不应超过200位"
274
-            },
275
-            author : {
276
-            	required : "请输入“负责人”."  ,
277
-                maxlength: "“负责人”长度不应超过50位"
253
+            	required : "请输入“JobHandler”."
278
             },
254
             },
279
             alarmEmail : {
255
             alarmEmail : {
280
-            	required : "请输入“报警邮件”."  ,
281
-                maxlength: "“报警邮件”长度不应超过200位"
256
+            	required : "请输入“报警邮件”."
282
             },
257
             },
283
             alarmThreshold : {
258
             alarmThreshold : {
284
             	required : "请输入“报警阈值”."  ,
259
             	required : "请输入“报警阈值”."  ,
285
             	digits:"阀值应该为整数."
260
             	digits:"阀值应该为整数."
261
+            },
262
+            author : {
263
+            	required : "请输入“负责人”."
286
             }
264
             }
287
-        }, 
265
+        },
288
 		highlight : function(element) {  
266
 		highlight : function(element) {  
289
             $(element).closest('.form-group').addClass('has-error');  
267
             $(element).closest('.form-group').addClass('has-error');  
290
         },
268
         },
348
 	
326
 	
349
 	// 更新
327
 	// 更新
350
 	$("#job_list").on('click', '.update',function() {
328
 	$("#job_list").on('click', '.update',function() {
329
+
330
+		// base data
331
+		$("#updateModal .form input[name='jobGroupTitle']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").attr("selected",true);
351
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
332
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
352
 		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
333
 		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
353
-		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
354
 		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
334
 		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
335
+		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
355
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
336
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
356
 		$("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler"));
337
 		$("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler"));
357
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
338
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
359
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
340
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
360
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
341
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
361
 		$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
342
 		$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
362
-		
343
+
363
 		// GLUE check
344
 		// GLUE check
364
 		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
345
 		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
365
 		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
346
 		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
376
 	var updateModalValidate = $("#updateModal .form").validate({
357
 	var updateModalValidate = $("#updateModal .form").validate({
377
 		errorElement : 'span',  
358
 		errorElement : 'span',  
378
         errorClass : 'help-block',
359
         errorClass : 'help-block',
379
-        focusInvalid : true,  
380
-        rules : {  
381
-            jobCron : {  
382
-            	required : true ,
383
-                maxlength: 100
384
-            },  
385
-            jobDesc : {  
386
-            	required : true ,
387
-                maxlength: 200
388
-            },
389
-            executorAddress : {
390
-            	required : true ,
391
-                maxlength: 200
392
-            },
393
-            executorHandler : {
394
-            	required : true ,
395
-                maxlength: 200
396
-            },
397
-            author : {
398
-            	required : true ,
399
-                maxlength: 200
400
-            },
401
-            alarmEmail : {
402
-            	required : true ,
403
-                maxlength: 200
404
-            },
405
-            alarmThreshold : {
406
-            	required : true ,
407
-            	digits:true
408
-            }
409
-        }, 
410
-        messages : {  
411
-            jobCron : {
412
-            	required :"请输入“Cron”."  ,
413
-                maxlength:"“Cron”长度不应超过100位"
414
-            },  
415
-            jobDesc : {
416
-            	required :"请输入“任务描述”."  ,
417
-                maxlength:"“任务描述”长度不应超过200位"
418
-            },  
419
-            executorAddress : {
420
-            	required :"请输入“执行器地址”."  ,
421
-                maxlength:"“执行器地址”长度不应超过200位"
422
-            },
423
-            executorHandler : {
424
-            	required : "请输入“jobHandler”."  ,
425
-                maxlength: "“jobHandler”长度不应超过200位"
426
-            },
427
-            author : {
428
-            	required : "请输入“负责人”."  ,
429
-                maxlength: "“负责人”长度不应超过50位"
430
-            },
431
-            alarmEmail : {
432
-            	required : "请输入“报警邮件”."  ,
433
-                maxlength: "“报警邮件”长度不应超过200位"
434
-            },
435
-            alarmThreshold : {
436
-            	required : "请输入“报警阈值”."  ,
437
-            	digits:"阀值应该为整数."
438
-            }
439
-        }, 
440
-		highlight : function(element) {  
360
+        focusInvalid : true,
361
+
362
+		rules : {
363
+			jobDesc : {
364
+				required : true,
365
+				maxlength: 50
366
+			},
367
+			jobCron : {
368
+				required : true
369
+			},
370
+			executorAddress : {
371
+				required : true
372
+			},
373
+			executorHandler : {
374
+				required : true
375
+			},
376
+			alarmEmail : {
377
+				required : true
378
+			},
379
+			alarmThreshold : {
380
+				required : true ,
381
+				digits:true
382
+			},
383
+			author : {
384
+				required : true
385
+			}
386
+		},
387
+		messages : {
388
+			jobDesc : {
389
+				required :"请输入“名称”."
390
+			},
391
+			jobCron : {
392
+				required :"请输入“Cron”."
393
+			},
394
+			executorAddress : {
395
+				required :"请输入“执行器地址”."
396
+			},
397
+			executorHandler : {
398
+				required : "请输入“JobHandler”."
399
+			},
400
+			alarmEmail : {
401
+				required : "请输入“报警邮件”."
402
+			},
403
+			alarmThreshold : {
404
+				required : "请输入“报警阈值”."  ,
405
+				digits:"阀值应该为整数."
406
+			},
407
+			author : {
408
+				required : "请输入“负责人”."
409
+			}
410
+		},
411
+		highlight : function(element) {
441
             $(element).closest('.form-group').addClass('has-error');  
412
             $(element).closest('.form-group').addClass('has-error');  
442
         },
413
         },
443
         success : function(label) {  
414
         success : function(label) {  

+ 32 - 0
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js Просмотреть файл

1
 $(function() {
1
 $(function() {
2
 
2
 
3
+	// 分组列表选中, 任务列表初始化和选中
4
+    var ifParam = true;
5
+	$("#jobGroup").on("change", function () {
6
+		var jobGroup = $(this).children('option:selected').val();
7
+		$.ajax({
8
+			type : 'POST',
9
+            async: false,   // async, avoid js invoke pagelist before jobName data init
10
+			url : base_url + '/joblog/getJobsByGroup',
11
+			data : {"jobGroup":jobGroup},
12
+			dataType : "json",
13
+			success : function(data){
14
+				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>');
18
+                    });
19
+                    if ($("#jobName").attr("paramVal")){
20
+                        $("#jobName").find("option[value='" + $("#jobName").attr("paramVal") + "']").attr("selected",true);
21
+                        $("#jobName").attr("paramVal")
22
+                    }
23
+				} else {
24
+					ComAlertTec.show(data.msg);
25
+				}
26
+			},
27
+		});
28
+	});
29
+	if ($("#jobGroup").attr("paramVal")){
30
+		$("#jobGroup").find("option[value='" + $("#jobGroup").attr("paramVal") + "']").attr("selected",true);
31
+        $("#jobGroup").change();
32
+        $("#jobGroup").attr("")
33
+	}
34
+
3
 	// 过滤时间
35
 	// 过滤时间
4
 	$('#filterTime').daterangepicker({
36
 	$('#filterTime').daterangepicker({
5
 		timePicker: true, 			//是否显示小时和分钟
37
 		timePicker: true, 			//是否显示小时和分钟

+ 2 - 2
xxl-job-executor-example/src/main/resources/log4j.xml Просмотреть файл

10
 	</appender>
10
 	</appender>
11
 	
11
 	
12
     <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
12
     <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
13
-        <param name="file" value="/logs/xxl-job-client-demo.log"/>
13
+        <param name="file" value="/data/applogs/xxl-job/xxl-job-executor-example.log"/>
14
         <param name="append" value="true"/>
14
         <param name="append" value="true"/>
15
         <param name="encoding" value="UTF-8"/>
15
         <param name="encoding" value="UTF-8"/>
16
         <layout class="org.apache.log4j.PatternLayout">
16
         <layout class="org.apache.log4j.PatternLayout">
19
     </appender>
19
     </appender>
20
     
20
     
21
     <appender name="xxl-job" class="com.xxl.job.core.log.XxlJobFileAppender">
21
     <appender name="xxl-job" class="com.xxl.job.core.log.XxlJobFileAppender">
22
-        <param name="filePath" value="/logs/xxl-job/"/>
22
+        <param name="filePath" value="/data/applogs/xxl-job/jobhandler/"/>
23
         <param name="append" value="true"/>
23
         <param name="append" value="true"/>
24
         <param name="encoding" value="UTF-8"/>
24
         <param name="encoding" value="UTF-8"/>
25
         <layout class="org.apache.log4j.PatternLayout">
25
         <layout class="org.apache.log4j.PatternLayout">

+ 1 - 1
xxl-job-executor-example/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml Просмотреть файл

17
 	
17
 	
18
 	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
18
 	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
19
 		SELECT <include refid="Base_Column_List" />
19
 		SELECT <include refid="Base_Column_List" />
20
-		FROM xxl_job_qrtz_trigger_info AS t
20
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
21
 		WHERE t.job_group = #{jobGroup}
21
 		WHERE t.job_group = #{jobGroup}
22
 			AND t.job_name = #{jobName}
22
 			AND t.job_name = #{jobName}
23
 	</select>
23
 	</select>