瀏覽代碼

coding snapshot

xueli.xue 9 年之前
父節點
當前提交
8a8d7a5caf

+ 12 - 2
README.md 查看文件

@@ -251,11 +251,21 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,通过重写L
251 251
 - 2、执行器异步回调执行日志;
252 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 266
 - 2、任务执行规则自定义:假如前一个任务正在执行,后续调度执行规则支持自定义;
257 267
 		串行(默认,当前逻辑):后续调度入调度队列;
258 268
 		并行:后续调度并行执行;
259 269
 		Pass:后续调度被Pass;
260 270
 - 3、兼容oracle;
261
-- 4、任务依赖;
271
+

+ 8 - 6
db/tables_xxl_job.sql 查看文件

@@ -143,7 +143,9 @@ CREATE TABLE XXL_JOB_QRTZ_LOCKS
143 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 149
   `id` int(11) NOT NULL AUTO_INCREMENT,
148 150
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
149 151
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
@@ -162,9 +164,9 @@ CREATE TABLE `xxl_job_qrtz_trigger_info` (
162 164
   `glue_source` text COMMENT 'GLUE源代码',
163 165
   `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
164 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 170
   `id` int(11) NOT NULL AUTO_INCREMENT,
169 171
   `job_group` varchar(255) NOT NULL COMMENT '任务组',
170 172
   `job_name` varchar(255) NOT NULL COMMENT '任务名',
@@ -181,9 +183,9 @@ CREATE TABLE `xxl_job_qrtz_trigger_log` (
181 183
   `handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
182 184
   `handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
183 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 189
   `id` int(11) NOT NULL AUTO_INCREMENT,
188 190
   `job_group` varchar(255) NOT NULL,
189 191
   `job_name` varchar(255) NOT NULL,
@@ -192,7 +194,7 @@ CREATE TABLE `xxl_job_qrtz_trigger_logglue` (
192 194
   `add_time` timestamp NULL DEFAULT NULL,
193 195
   `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
194 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,9 +35,9 @@ public class JobInfoController {
35 35
 	@ResponseBody
36 36
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
37 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 43
 	@RequestMapping("/add")
@@ -47,7 +47,7 @@ public class JobInfoController {
47 47
 			String author, String alarmEmail, int alarmThreshold, 
48 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 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,6 +47,13 @@ public class JobLogController {
47 47
 		model.addAttribute("JobGroupList", JobGroupEnum.values());
48 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 58
 	@RequestMapping("/pageList")
52 59
 	@ResponseBody

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/constant/Constants.java 查看文件

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

+ 5 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java 查看文件

@@ -3,6 +3,7 @@ package com.xxl.job.admin.dao;
3 3
 import java.util.List;
4 4
 
5 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,8 +12,8 @@ import com.xxl.job.admin.core.model.XxlJobInfo;
11 12
  */
12 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 18
 	public int save(XxlJobInfo info);
18 19
 	
@@ -21,5 +22,6 @@ public interface IXxlJobInfoDao {
21 22
 	public int update(XxlJobInfo item);
22 23
 	
23 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,6 +5,7 @@ import java.util.List;
5 5
 
6 6
 import javax.annotation.Resource;
7 7
 
8
+import com.xxl.job.admin.core.model.XxlJobLog;
8 9
 import org.mybatis.spring.SqlSessionTemplate;
9 10
 import org.springframework.stereotype.Repository;
10 11
 
@@ -22,23 +23,23 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao {
22 23
 	public SqlSessionTemplate sqlSessionTemplate;
23 24
 
24 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 27
 		HashMap<String, Object> params = new HashMap<String, Object>();
27 28
 		params.put("offset", offset);
28 29
 		params.put("pagesize", pagesize);
29 30
 		params.put("jobGroup", jobGroup);
30
-		params.put("jobName", jobName);
31
+		params.put("jobDesc", jobDesc);
31 32
 		
32 33
 		return sqlSessionTemplate.selectList("XxlJobInfoMapper.pageList", params);
33 34
 	}
34 35
 
35 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 38
 		HashMap<String, Object> params = new HashMap<String, Object>();
38 39
 		params.put("offset", offset);
39 40
 		params.put("pagesize", pagesize);
40 41
 		params.put("jobGroup", jobGroup);
41
-		params.put("jobName", jobName);
42
+		params.put("jobDesc", jobDesc);
42 43
 		
43 44
 		return sqlSessionTemplate.selectOne("XxlJobInfoMapper.pageListCount", params);
44 45
 	}
@@ -70,5 +71,10 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao {
70 71
 		
71 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,9 +11,9 @@ import com.xxl.job.admin.core.model.ReturnT;
11 11
  */
12 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 17
 			String executorAddress,	String executorHandler, String executorParam, 
18 18
 			String author, String alarmEmail, int alarmThreshold,
19 19
 			int glueSwitch, String glueSource, String glueRemark);

+ 11 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java 查看文件

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

+ 1 - 1
xxl-job-admin/src/main/resources/log4j.properties 查看文件

@@ -5,6 +5,6 @@ log4j.appender.console.layout=org.apache.log4j.PatternLayout
5 5
 log4j.appender.console.layout.ConversionPattern=%d - xxl-job-admin - %p [%c] - <%m>%n
6 6
 
7 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 9
 log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
10 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,13 +50,13 @@
50 50
 	
51 51
 	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
52 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 54
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
55 55
 			<if test="jobGroup != null and jobGroup != ''">
56 56
 				AND t.job_group = #{jobGroup}
57 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 60
 			</if>
61 61
 		</trim>
62 62
 		ORDER BY id DESC
@@ -65,19 +65,19 @@
65 65
 	
66 66
 	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
67 67
 		SELECT count(1)
68
-		FROM xxl_job_qrtz_trigger_info AS t
68
+		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
69 69
 		<trim prefix="WHERE" prefixOverrides="AND | OR" >
70 70
 			<if test="jobGroup != null and jobGroup != ''">
71 71
 				AND t.job_group = #{jobGroup}
72 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 75
 			</if>
76 76
 		</trim>
77 77
 	</select>
78 78
 	
79 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 81
 			job_group,
82 82
 			job_name,
83 83
 			job_cron,
@@ -119,13 +119,13 @@
119 119
 	
120 120
 	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
121 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 123
 		WHERE t.job_group = #{jobGroup}
124 124
 			AND t.job_name = #{jobName}
125 125
 	</select>
126 126
 	
127 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 129
 		SET 
130 130
 			job_cron = #{jobCron},
131 131
 			job_desc = #{jobDesc},
@@ -146,10 +146,16 @@
146 146
 	<delete id="delete" parameterType="java.lang.String">
147 147
 		DELETE
148 148
 		FROM
149
-			xxl_job_qrtz_trigger_info
149
+			XXL_JOB_QRTZ_TRIGGER_INFO
150 150
 		WHERE
151 151
 			job_group = #{jobGroup}
152 152
 		AND job_name = #{jobName}
153 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 161
 </mapper>

+ 4 - 4
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml 查看文件

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

+ 7 - 7
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml 查看文件

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

+ 50 - 46
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl 查看文件

@@ -34,7 +34,7 @@
34 34
 	    	<div class="row">
35 35
 	    		<div class="col-xs-4">
36 36
 	              	<div class="input-group">
37
-	                	<span class="input-group-addon">任务组</span>
37
+	                	<span class="input-group-addon">组</span>
38 38
                 		<select class="form-control" id="jobGroup" >
39 39
                 			<#list JobGroupList as group>
40 40
                 				<option value="${group}" >${group.desc}</option>
@@ -44,8 +44,8 @@
44 44
 	            </div>
45 45
 	            <div class="col-xs-4">
46 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 49
 	              	</div>
50 50
 	            </div>
51 51
 	            <div class="col-xs-2">
@@ -67,9 +67,9 @@
67 67
 				                <thead>
68 68
 					            	<tr>
69 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 73
 					                  	<th name="jobCron" >Cron</th>
74 74
 					                  	<th name="jobClass" >JobBean</th>
75 75
 					                  	<th name="executorAddress" >执行器地址</th>
@@ -104,12 +104,12 @@
104 104
 	<div class="modal-dialog modal-lg">
105 105
 		<div class="modal-content">
106 106
 			<div class="modal-header">
107
-            	<h4 class="modal-title" >新增任务调度信息</h4>
107
+            	<h4 class="modal-title" >新增任务</h4>
108 108
          	</div>
109 109
          	<div class="modal-body">
110 110
 				<form class="form-horizontal form" role="form" >
111 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 113
 						<div class="col-sm-4">
114 114
 							<select class="form-control" name="jobGroup" >
115 115
 		            			<#list JobGroupList as group>
@@ -117,33 +117,31 @@
117 117
 		            			</#list>
118 118
 		                  	</select>
119 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 122
 					</div>
123 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 128
 					</div>
135 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 134
 					</div>
141 135
 					<div class="form-group">
142 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 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 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 145
 					<div class="form-group">
148 146
 						<div class="col-sm-offset-3 col-sm-6">
149 147
 							<button type="submit" class="btn btn-primary"  >保存</button>
@@ -190,41 +188,47 @@ public class DemoJobHandler extends IJobHandler {
190 188
 	<div class="modal-dialog modal-lg">
191 189
 		<div class="modal-content">
192 190
 			<div class="modal-header">
193
-            	<h4 class="modal-title" >更新任务调度信息</h4>
191
+            	<h4 class="modal-title" >更新任务</h4>
194 192
          	</div>
195 193
          	<div class="modal-body">
196 194
 				<form class="form-horizontal form" role="form" >
197 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 208
 					</div>
203 209
 					<div class="form-group">
204 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 214
 					</div>
209 215
 					
210 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 221
 					</div>
222 222
 					<div class="form-group">
223 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 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 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 232
 					<div class="form-group">
229 233
 						<div class="col-sm-offset-3 col-sm-6">
230 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,18 +34,21 @@
34 34
 	    	<div class="row">
35 35
 	    		<div class="col-xs-3">
36 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 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 42
                 			</#list>
42 43
 	                  	</select>
43 44
 	              	</div>
44 45
 	            </div>
45 46
 	            <div class="col-xs-3">
46 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 52
 	              	</div>
50 53
 	            </div>
51 54
 	            <div class="col-xs-4">

+ 86 - 115
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js 查看文件

@@ -6,10 +6,11 @@ $(function() {
6 6
 	    "serverSide": true,
7 7
 		"ajax": {
8 8
 			url: base_url + "/jobinfo/pageList",
9
+			type:"post",
9 10
 	        data : function ( d ) {
10 11
 	        	var obj = {};
11 12
 	        	obj.jobGroup = $('#jobGroup').val();
12
-	        	obj.jobName = $('#jobName').val();
13
+	        	obj.jobDesc = $('#jobDesc').val();
13 14
 	        	obj.start = d.start;
14 15
 	        	obj.length = d.length;
15 16
                 return obj;
@@ -33,7 +34,7 @@ $(function() {
33 34
 	            			return data;
34 35
 	            		}
35 36
             		},
36
-	                { "data": 'jobName'},
37
+	                { "data": 'jobName', "visible" : false},
37 38
 	                { "data": 'jobDesc', "visible" : true},
38 39
 	                { "data": 'jobCron', "visible" : true},
39 40
 	                { "data": 'jobClass', "visible" : false},
@@ -98,7 +99,6 @@ $(function() {
98 99
 	                							' jobCron="'+ row.jobCron +'" '+
99 100
 	                							' jobDesc="'+ row.jobDesc +'" '+
100 101
 	                							' jobClass="'+ row.jobClass +'" '+
101
-	                							' jobData="'+ row.jobData +'" '+
102 102
 	                							' executorAddress="'+row.executorAddress +'" '+
103 103
 	                							' executorHandler="'+ row.executorHandler +'" '+
104 104
 	                							' executorParam="'+ row.executorParam +'" '+
@@ -214,77 +214,55 @@ $(function() {
214 214
 		errorElement : 'span',  
215 215
         errorClass : 'help-block',
216 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 225
             executorAddress : {
233
-            	required : true ,
234
-                maxlength: 200
226
+            	required : true
235 227
             },
236 228
             executorHandler : {
237
-            	required : true ,
238
-                maxlength: 200
239
-            },
240
-            author : {
241
-            	required : true ,
242
-                maxlength: 200
229
+            	required : true
243 230
             },
244 231
             alarmEmail : {
245
-            	required : true ,
246
-                maxlength: 200
232
+            	required : true
247 233
             },
248 234
             alarmThreshold : {
249 235
             	required : true ,
250 236
             	digits:true
251
-            }
237
+            },
238
+			author : {
239
+				required : true
240
+			}
252 241
         }, 
253 242
         messages : {  
254
-        	jobName : {  
255
-        		required :"请输入“任务名”"  ,
256
-                minlength:"“任务名”长度不应低于4位",
257
-                maxlength:"“任务名”长度不应超过100位"
258
-            },  
259
-            jobCron : {
260
-            	required :"请输入“Cron”."  ,
261
-                maxlength:"“Cron”长度不应超过100位"
262
-            },  
263 243
             jobDesc : {
264
-            	required :"请输入“任务描述”."  ,
265
-                maxlength:"“任务描述”长度不应超过200位"
266
-            },  
244
+            	required :"请输入“名称”."
245
+            },
246
+            jobCron : {
247
+            	required :"请输入“Cron”."
248
+            },
267 249
             executorAddress : {
268
-            	required :"请输入“执行器地址”."  ,
269
-                maxlength:"“执行器地址”长度不应超过200位"
250
+            	required :"请输入“执行器地址”."
270 251
             },
271 252
             executorHandler : {
272
-            	required : "请输入“jobHandler”."  ,
273
-                maxlength: "“jobHandler”长度不应超过200位"
274
-            },
275
-            author : {
276
-            	required : "请输入“负责人”."  ,
277
-                maxlength: "“负责人”长度不应超过50位"
253
+            	required : "请输入“JobHandler”."
278 254
             },
279 255
             alarmEmail : {
280
-            	required : "请输入“报警邮件”."  ,
281
-                maxlength: "“报警邮件”长度不应超过200位"
256
+            	required : "请输入“报警邮件”."
282 257
             },
283 258
             alarmThreshold : {
284 259
             	required : "请输入“报警阈值”."  ,
285 260
             	digits:"阀值应该为整数."
261
+            },
262
+            author : {
263
+            	required : "请输入“负责人”."
286 264
             }
287
-        }, 
265
+        },
288 266
 		highlight : function(element) {  
289 267
             $(element).closest('.form-group').addClass('has-error');  
290 268
         },
@@ -348,10 +326,13 @@ $(function() {
348 326
 	
349 327
 	// 更新
350 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 332
 		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
352 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 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 336
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
356 337
 		$("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler"));
357 338
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
@@ -359,7 +340,7 @@ $(function() {
359 340
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
360 341
 		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
361 342
 		$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
362
-		
343
+
363 344
 		// GLUE check
364 345
 		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
365 346
 		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
@@ -376,68 +357,58 @@ $(function() {
376 357
 	var updateModalValidate = $("#updateModal .form").validate({
377 358
 		errorElement : 'span',  
378 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 412
             $(element).closest('.form-group').addClass('has-error');  
442 413
         },
443 414
         success : function(label) {  

+ 32 - 0
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js 查看文件

@@ -1,5 +1,37 @@
1 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 36
 	$('#filterTime').daterangepicker({
5 37
 		timePicker: true, 			//是否显示小时和分钟

+ 2 - 2
xxl-job-executor-example/src/main/resources/log4j.xml 查看文件

@@ -10,7 +10,7 @@
10 10
 	</appender>
11 11
 	
12 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 14
         <param name="append" value="true"/>
15 15
         <param name="encoding" value="UTF-8"/>
16 16
         <layout class="org.apache.log4j.PatternLayout">
@@ -19,7 +19,7 @@
19 19
     </appender>
20 20
     
21 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 23
         <param name="append" value="true"/>
24 24
         <param name="encoding" value="UTF-8"/>
25 25
         <layout class="org.apache.log4j.PatternLayout">

+ 1 - 1
xxl-job-executor-example/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml 查看文件

@@ -17,7 +17,7 @@
17 17
 	
18 18
 	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
19 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 21
 		WHERE t.job_group = #{jobGroup}
22 22
 			AND t.job_name = #{jobName}
23 23
 	</select>