日志重构
This commit is contained in:
parent
1748bae391
commit
ee50140842
|
@ -5,6 +5,8 @@ git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
|
|||
|
||||
博客地址(内附使用教程):http://www.cnblogs.com/xuxueli/p/5021979.html
|
||||
|
||||
技术交流群(仅作技术交流):367260654
|
||||
|
||||
# 特点:基于quartz封装实现的的集群任务调度管理平台
|
||||
1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
|
||||
2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
# DROP TABLE IF EXISTS XXL_JOB_QRTZ_JOB_DETAILS;
|
||||
# DROP TABLE IF EXISTS XXL_JOB_QRTZ_CALENDARS;
|
||||
# DROP TABLE IF EXISTS `xxl_job_qrtz_trigger_log`;
|
||||
# DROP TABLE IF EXISTS `xxl_job_qrtz_trigger_info`;
|
||||
|
||||
CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS
|
||||
(
|
||||
|
@ -158,18 +159,35 @@ CREATE TABLE XXL_JOB_QRTZ_LOCKS
|
|||
|
||||
CREATE TABLE `xxl_job_qrtz_trigger_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`job_name` varchar(255) NOT NULL,
|
||||
`job_cron` varchar(128) DEFAULT NULL,
|
||||
`job_class` varchar(255) DEFAULT NULL,
|
||||
`job_data` varchar(2048) DEFAULT NULL,
|
||||
`trigger_time` datetime DEFAULT NULL,
|
||||
`trigger_status` varchar(255) DEFAULT NULL,
|
||||
`trigger_msg` varchar(2048) DEFAULT NULL,
|
||||
`handle_time` datetime DEFAULT NULL,
|
||||
`handle_status` varchar(255) DEFAULT NULL,
|
||||
`handle_msg` varchar(2048) DEFAULT NULL,
|
||||
`job_group` varchar(255) NOT NULL COMMENT '任务组',
|
||||
`job_name` varchar(255) NOT NULL COMMENT '任务名',
|
||||
`job_cron` varchar(128) NOT NULL COMMENT '任务执行CORN表达式',
|
||||
`job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
|
||||
`job_data` varchar(2048) DEFAULT NULL COMMENT '任务执行数据',
|
||||
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
|
||||
`trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',
|
||||
`trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',
|
||||
`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
|
||||
`handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
|
||||
`handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8;
|
||||
);
|
||||
|
||||
CREATE TABLE `xxl_job_qrtz_trigger_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`job_group` varchar(255) NOT NULL COMMENT '任务组',
|
||||
`job_name` varchar(255) NOT NULL COMMENT '任务名',
|
||||
`job_cron` varchar(128) NOT NULL COMMENT '任务执行CORN表达式',
|
||||
`job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
|
||||
`job_data` varchar(2048) DEFAULT NULL COMMENT '任务执行数据',
|
||||
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
|
||||
`trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',
|
||||
`trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',
|
||||
`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
|
||||
`handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
|
||||
`handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
commit;
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
<dependency>
|
||||
<groupId>org.quartz-scheduler</groupId>
|
||||
<artifactId>quartz</artifactId>
|
||||
<version>2.2.1</version>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- httpclient -->
|
||||
|
|
|
@ -13,7 +13,7 @@ public class IndexController {
|
|||
|
||||
@RequestMapping("/")
|
||||
public String index(Model model) {
|
||||
return "redirect:job";
|
||||
return "redirect:jobinfo";
|
||||
}
|
||||
|
||||
@RequestMapping("/help")
|
||||
|
|
|
@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
|||
|
||||
import com.xxl.job.client.handler.HandlerRepository;
|
||||
import com.xxl.job.client.util.JacksonUtil;
|
||||
import com.xxl.job.core.constant.Constants.JobGroupEnum;
|
||||
import com.xxl.job.core.model.ReturnT;
|
||||
import com.xxl.job.core.model.XxlJobInfo;
|
||||
import com.xxl.job.core.util.DynamicSchedulerUtil;
|
||||
|
@ -33,17 +34,16 @@ import com.xxl.job.service.job.HttpJobBean;
|
|||
* @author xuxueli 2015-12-19 16:13:16
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping("/job")
|
||||
public class JobController {
|
||||
@RequestMapping("/jobinfo")
|
||||
public class JobInfoController {
|
||||
|
||||
@Resource
|
||||
private IXxlJobInfoDao xxlJobInfoDao;
|
||||
|
||||
@RequestMapping
|
||||
public String index(Model model) {
|
||||
//List<Map<String, Object>> jobList = DynamicSchedulerUtil.getJobList();
|
||||
//model.addAttribute("jobList", jobList);
|
||||
return "job/index";
|
||||
model.addAttribute("JobGroupList", JobGroupEnum.values());
|
||||
return "jobinfo/index";
|
||||
}
|
||||
|
||||
@RequestMapping("/pageList")
|
|
@ -1,7 +1,6 @@
|
|||
package com.xxl.job.controller;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import com.xxl.job.core.constant.Constants.JobGroupEnum;
|
||||
import com.xxl.job.core.model.ReturnT;
|
||||
import com.xxl.job.core.model.XxlJobLog;
|
||||
import com.xxl.job.dao.IXxlJobLogDao;
|
||||
|
@ -32,6 +32,43 @@ public class JobLogController {
|
|||
@Resource
|
||||
public IXxlJobLogDao xxlJobLogDao;
|
||||
|
||||
@RequestMapping
|
||||
public String index(Model model) {
|
||||
model.addAttribute("JobGroupList", JobGroupEnum.values());
|
||||
return "joblog/index";
|
||||
}
|
||||
|
||||
@RequestMapping("/pageList")
|
||||
@ResponseBody
|
||||
public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
|
||||
@RequestParam(required = false, defaultValue = "10") int length,
|
||||
String jobGroup, String jobName, String filterTime) {
|
||||
|
||||
// parse param
|
||||
Date triggerTimeStart = null;
|
||||
Date triggerTimeEnd = null;
|
||||
if (StringUtils.isNotBlank(filterTime)) {
|
||||
String[] temp = filterTime.split(" - ");
|
||||
if (temp!=null && temp.length == 2) {
|
||||
try {
|
||||
triggerTimeStart = DateUtils.parseDate(temp[0], new String[]{"yyyy-MM-dd HH:mm:ss"});
|
||||
triggerTimeEnd = DateUtils.parseDate(temp[1], new String[]{"yyyy-MM-dd HH:mm:ss"});
|
||||
} catch (ParseException e) { }
|
||||
}
|
||||
}
|
||||
|
||||
// page query
|
||||
List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
|
||||
int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
|
||||
|
||||
// package result
|
||||
Map<String, Object> maps = new HashMap<String, Object>();
|
||||
maps.put("recordsTotal", list_count); // 总记录数
|
||||
maps.put("recordsFiltered", list_count); // 过滤后的总记录数
|
||||
maps.put("data", list); // 分页列表
|
||||
return maps;
|
||||
}
|
||||
|
||||
@RequestMapping("/save")
|
||||
@ResponseBody
|
||||
public ReturnT<String> triggerLog(int triggerLogId, String status, String msg) {
|
||||
|
@ -46,52 +83,4 @@ public class JobLogController {
|
|||
return ReturnT.FAIL;
|
||||
}
|
||||
|
||||
@RequestMapping
|
||||
public String index(Model model, String jobName, String filterTime) {
|
||||
|
||||
// 默认filterTime
|
||||
Calendar todayz = Calendar.getInstance();
|
||||
todayz.set(Calendar.HOUR_OF_DAY, 0);
|
||||
todayz.set(Calendar.MINUTE, 0);
|
||||
todayz.set(Calendar.SECOND, 0);
|
||||
model.addAttribute("triggerTimeStart", todayz.getTime());
|
||||
model.addAttribute("triggerTimeEnd", Calendar.getInstance().getTime());
|
||||
|
||||
model.addAttribute("jobName", jobName);
|
||||
model.addAttribute("filterTime", filterTime);
|
||||
return "joblog/index";
|
||||
}
|
||||
|
||||
@RequestMapping("/pageList")
|
||||
@ResponseBody
|
||||
public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
|
||||
@RequestParam(required = false, defaultValue = "10") int length,
|
||||
String jobName, String filterTime) {
|
||||
// parse param
|
||||
Date triggerTimeStart = null;
|
||||
Date triggerTimeEnd = null;
|
||||
if (StringUtils.isNotBlank(filterTime)) {
|
||||
String[] temp = filterTime.split(" - ");
|
||||
if (temp!=null && temp.length == 2) {
|
||||
try {
|
||||
triggerTimeEnd = DateUtils.parseDate(temp[0], new String[]{"yyyy-MM-dd HH:mm:ss"});
|
||||
triggerTimeEnd = DateUtils.parseDate(temp[1], new String[]{"yyyy-MM-dd HH:mm:ss"});
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// page query
|
||||
List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobName, triggerTimeStart, triggerTimeEnd);
|
||||
int list_count = xxlJobLogDao.pageListCount(start, length, jobName, triggerTimeStart, triggerTimeEnd);
|
||||
|
||||
// package result
|
||||
Map<String, Object> maps = new HashMap<String, Object>();
|
||||
maps.put("recordsTotal", list_count); // 总记录数
|
||||
maps.put("recordsFiltered", list_count);// 过滤后的总记录数
|
||||
maps.put("data", list); // 分页列表
|
||||
return maps;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,69 +9,125 @@ import java.util.Date;
|
|||
public class XxlJobInfo {
|
||||
|
||||
private int id;
|
||||
// job info
|
||||
private String jobName;
|
||||
private String jobCron; // base on quartz
|
||||
private String jobClass; // base on quartz
|
||||
private String jobStatus; // base on quartz
|
||||
private String jobData; // base on db, Map-JSON-String
|
||||
|
||||
private String jobGroup; // base on quartz 任务组
|
||||
private String jobName; // base on quartz 任务名
|
||||
private String jobCron; // base on quartz 任务执行CRON表达式
|
||||
private String jobClass; // base on quartz 任务执行JobBean
|
||||
private String jobData; // base on db, Map-JSON-String 任务执行数据
|
||||
|
||||
private Date addTime;
|
||||
private Date updateTime;
|
||||
|
||||
private String author; // 作者
|
||||
private String alarmEmail; // 报警邮件
|
||||
private int alarmThreshold; // 报警阀值
|
||||
|
||||
// copy from quartz
|
||||
private String jobStatus; // 任务状态
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getJobGroup() {
|
||||
return jobGroup;
|
||||
}
|
||||
|
||||
public void setJobGroup(String jobGroup) {
|
||||
this.jobGroup = jobGroup;
|
||||
}
|
||||
|
||||
public String getJobName() {
|
||||
return jobName;
|
||||
}
|
||||
|
||||
public void setJobName(String jobName) {
|
||||
this.jobName = jobName;
|
||||
}
|
||||
|
||||
public String getJobCron() {
|
||||
return jobCron;
|
||||
}
|
||||
|
||||
public void setJobCron(String jobCron) {
|
||||
this.jobCron = jobCron;
|
||||
}
|
||||
|
||||
public String getJobClass() {
|
||||
return jobClass;
|
||||
}
|
||||
|
||||
public void setJobClass(String jobClass) {
|
||||
this.jobClass = jobClass;
|
||||
}
|
||||
public String getJobStatus() {
|
||||
return jobStatus;
|
||||
}
|
||||
public void setJobStatus(String jobStatus) {
|
||||
this.jobStatus = jobStatus;
|
||||
}
|
||||
|
||||
public String getJobData() {
|
||||
return jobData;
|
||||
}
|
||||
|
||||
public void setJobData(String jobData) {
|
||||
this.jobData = jobData;
|
||||
}
|
||||
|
||||
public Date getAddTime() {
|
||||
return addTime;
|
||||
}
|
||||
|
||||
public void setAddTime(Date addTime) {
|
||||
this.addTime = addTime;
|
||||
}
|
||||
|
||||
public Date getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public void setUpdateTime(Date updateTime) {
|
||||
this.updateTime = updateTime;
|
||||
}
|
||||
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public String getAlarmEmail() {
|
||||
return alarmEmail;
|
||||
}
|
||||
|
||||
public void setAlarmEmail(String alarmEmail) {
|
||||
this.alarmEmail = alarmEmail;
|
||||
}
|
||||
|
||||
public int getAlarmThreshold() {
|
||||
return alarmThreshold;
|
||||
}
|
||||
|
||||
public void setAlarmThreshold(int alarmThreshold) {
|
||||
this.alarmThreshold = alarmThreshold;
|
||||
}
|
||||
|
||||
public String getJobStatus() {
|
||||
return jobStatus;
|
||||
}
|
||||
|
||||
public void setJobStatus(String jobStatus) {
|
||||
this.jobStatus = jobStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "XxlJobInfo [id=" + id + ", jobName=" + jobName + ", jobCron=" + jobCron + ", jobClass=" + jobClass
|
||||
+ ", jobStatus=" + jobStatus + ", jobData=" + jobData + ", addTime=" + addTime + ", updateTime="
|
||||
+ updateTime + "]";
|
||||
return "XxlJobInfo [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
|
||||
+ ", jobClass=" + jobClass + ", jobData=" + jobData + ", addTime=" + addTime + ", updateTime="
|
||||
+ updateTime + ", author=" + author + ", alarmEmail=" + alarmEmail + ", alarmThreshold="
|
||||
+ alarmThreshold + ", jobStatus=" + jobStatus + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,7 +9,9 @@ import java.util.Date;
|
|||
public class XxlJobLog {
|
||||
|
||||
private int id;
|
||||
|
||||
// job info
|
||||
private String jobGroup;
|
||||
private String jobName;
|
||||
private String jobCron;
|
||||
private String jobClass;
|
||||
|
@ -31,6 +33,12 @@ public class XxlJobLog {
|
|||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
public String getJobGroup() {
|
||||
return jobGroup;
|
||||
}
|
||||
public void setJobGroup(String jobGroup) {
|
||||
this.jobGroup = jobGroup;
|
||||
}
|
||||
public String getJobName() {
|
||||
return jobName;
|
||||
}
|
||||
|
@ -94,10 +102,10 @@ public class XxlJobLog {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "XxlJobLog [id=" + id + ", jobName=" + jobName + ", jobCron=" + jobCron + ", jobClass=" + jobClass
|
||||
+ ", jobData=" + jobData + ", triggerTime=" + triggerTime + ", triggerStatus=" + triggerStatus
|
||||
+ ", triggerMsg=" + triggerMsg + ", handleTime=" + handleTime + ", handleStatus=" + handleStatus
|
||||
+ ", handleMsg=" + handleMsg + "]";
|
||||
return "XxlJobLog [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
|
||||
+ ", jobClass=" + jobClass + ", jobData=" + jobData + ", triggerTime=" + triggerTime
|
||||
+ ", triggerStatus=" + triggerStatus + ", triggerMsg=" + triggerMsg + ", handleTime=" + handleTime
|
||||
+ ", handleStatus=" + handleStatus + ", handleMsg=" + handleMsg + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.xxl.job.dao;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -12,16 +11,14 @@ import com.xxl.job.core.model.XxlJobLog;
|
|||
*/
|
||||
public interface IXxlJobLogDao {
|
||||
|
||||
public int save(XxlJobLog xxlJobLog);
|
||||
public List<XxlJobLog> pageList(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
|
||||
public int pageListCount(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
|
||||
|
||||
public XxlJobLog load(int id);
|
||||
public XxlJobLog loadByGroupAndName(String jobGroup, String jobName);
|
||||
|
||||
public int save(XxlJobLog xxlJobLog);
|
||||
public int updateTriggerInfo(XxlJobLog xxlJobLog);
|
||||
|
||||
public int updateHandleInfo(XxlJobLog xxlJobLog);
|
||||
|
||||
public List<XxlJobLog> pageList(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd);
|
||||
|
||||
public int pageListCount(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd);
|
||||
|
||||
}
|
||||
|
|
|
@ -23,11 +23,29 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
|
|||
public SqlSessionTemplate sqlSessionTemplate;
|
||||
|
||||
@Override
|
||||
public int save(XxlJobLog xxlJobLog) {
|
||||
if (xxlJobLog!=null && xxlJobLog.getJobData().length()>2000) {
|
||||
xxlJobLog.setJobData(xxlJobLog.getJobData().substring(0, 2000));
|
||||
public List<XxlJobLog> pageList(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
params.put("offset", offset);
|
||||
params.put("pagesize", pagesize);
|
||||
params.put("jobGroup", jobGroup);
|
||||
params.put("jobName", jobName);
|
||||
params.put("triggerTimeStart", triggerTimeStart);
|
||||
params.put("triggerTimeEnd", triggerTimeEnd);
|
||||
|
||||
return sqlSessionTemplate.selectList("XxlJobLogMapper.pageList", params);
|
||||
}
|
||||
return sqlSessionTemplate.insert("XxlJobLogMapper.save", xxlJobLog);
|
||||
|
||||
@Override
|
||||
public int pageListCount(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
params.put("offset", offset);
|
||||
params.put("pagesize", pagesize);
|
||||
params.put("jobGroup", jobGroup);
|
||||
params.put("jobName", jobName);
|
||||
params.put("triggerTimeStart", triggerTimeStart);
|
||||
params.put("triggerTimeEnd", triggerTimeEnd);
|
||||
|
||||
return sqlSessionTemplate.selectOne("XxlJobLogMapper.pageListCount", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -35,6 +53,22 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
|
|||
return sqlSessionTemplate.selectOne("XxlJobLogMapper.load", id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XxlJobLog loadByGroupAndName(String jobGroup, String jobName) {
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
params.put("jobGroup", jobGroup);
|
||||
params.put("jobName", jobName);
|
||||
return sqlSessionTemplate.selectOne("XxlJobLogMapper.loadByGroupAndName", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int save(XxlJobLog xxlJobLog) {
|
||||
if (xxlJobLog!=null && xxlJobLog.getJobData().length()>2000) {
|
||||
xxlJobLog.setJobData(xxlJobLog.getJobData().substring(0, 2000));
|
||||
}
|
||||
return sqlSessionTemplate.insert("XxlJobLogMapper.save", xxlJobLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateTriggerInfo(XxlJobLog xxlJobLog) {
|
||||
if (xxlJobLog!=null && xxlJobLog.getTriggerMsg().length()>2000) {
|
||||
|
@ -51,26 +85,4 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
|
|||
return sqlSessionTemplate.update("XxlJobLogMapper.updateHandleInfo", xxlJobLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<XxlJobLog> pageList(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
params.put("offset", offset);
|
||||
params.put("pagesize", pagesize);
|
||||
params.put("jobName", jobName);
|
||||
params.put("triggerTimeStart", triggerTimeStart);
|
||||
params.put("triggerTimeEnd", triggerTimeEnd);
|
||||
return sqlSessionTemplate.selectList("XxlJobLogMapper.pageList", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int pageListCount(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
params.put("offset", offset);
|
||||
params.put("pagesize", pagesize);
|
||||
params.put("jobName", jobName);
|
||||
params.put("triggerTimeStart", triggerTimeStart);
|
||||
params.put("triggerTimeEnd", triggerTimeEnd);
|
||||
return sqlSessionTemplate.selectOne("XxlJobLogMapper.pageListCount", params);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<resultMap id="XxlJobLog" type="com.xxl.job.core.model.XxlJobLog" >
|
||||
<result column="id" property="id" />
|
||||
|
||||
<result column="job_group" property="jobGroup" />
|
||||
<result column="job_name" property="jobName" />
|
||||
<result column="job_cron" property="jobCron" />
|
||||
<result column="job_class" property="jobClass" />
|
||||
|
@ -22,6 +23,7 @@
|
|||
|
||||
<sql id="Base_Column_List">
|
||||
t.id,
|
||||
t.job_group,
|
||||
t.job_name,
|
||||
t.job_cron,
|
||||
t.job_class,
|
||||
|
@ -34,13 +36,68 @@
|
|||
t.handle_msg
|
||||
</sql>
|
||||
|
||||
<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobLog">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
<trim prefix="WHERE" prefixOverrides="AND | OR" >
|
||||
<if test="jobGroup != null and jobGroup != ''">
|
||||
AND t.job_group = #{jobGroup}
|
||||
</if>
|
||||
<if test="jobName != null and jobName != ''">
|
||||
AND t.job_name = #{jobName}
|
||||
</if>
|
||||
<if test="triggerTimeStart != null">
|
||||
AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
|
||||
</if>
|
||||
<if test="triggerTimeEnd != null">
|
||||
AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
|
||||
</if>
|
||||
</trim>
|
||||
ORDER BY id DESC
|
||||
LIMIT #{offset}, #{pagesize}
|
||||
</select>
|
||||
|
||||
<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
|
||||
SELECT count(1)
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
<trim prefix="WHERE" prefixOverrides="AND | OR" >
|
||||
<if test="jobGroup != null and jobGroup != ''">
|
||||
AND t.job_group = #{jobGroup}
|
||||
</if>
|
||||
<if test="jobName != null and jobName != ''">
|
||||
AND t.job_name = #{jobName}
|
||||
</if>
|
||||
<if test="triggerTimeStart != null">
|
||||
AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
|
||||
</if>
|
||||
<if test="triggerTimeEnd != null">
|
||||
AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
|
||||
</if>
|
||||
</trim>
|
||||
</select>
|
||||
|
||||
<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobLog">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
WHERE t.id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="loadByGroupAndName" parameterType="java.util.HashMap" resultMap="XxlJobLog">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
WHERE t.job_group = #{jobGroup}
|
||||
AND t.job_name = #{jobName}
|
||||
</select>
|
||||
|
||||
<insert id="save" parameterType="com.xxl.job.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
|
||||
INSERT INTO `xxl_job_qrtz_trigger_log` (
|
||||
`job_group`,
|
||||
`job_name`,
|
||||
`job_cron`,
|
||||
`job_class`,
|
||||
`job_data`
|
||||
) VALUES (
|
||||
#{jobGroup},
|
||||
#{jobName},
|
||||
#{jobCron},
|
||||
#{jobClass},
|
||||
|
@ -51,12 +108,6 @@
|
|||
</selectKey>
|
||||
</insert>
|
||||
|
||||
<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobLog">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
WHERE t.id = #{id}
|
||||
</select>
|
||||
|
||||
<update id="updateTriggerInfo">
|
||||
UPDATE `xxl_job_qrtz_trigger_log`
|
||||
SET
|
||||
|
@ -75,38 +126,4 @@
|
|||
WHERE `id`= #{id}
|
||||
</update>
|
||||
|
||||
<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobLog">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
<trim prefix="WHERE" prefixOverrides="AND | OR" >
|
||||
<if test="jobName != null and jobName!=''">
|
||||
AND t.job_name = #{jobName}
|
||||
</if>
|
||||
<if test="triggerTimeStart != null">
|
||||
AND t.trigger_time <![CDATA[ > ]]> #{triggerTimeStart}
|
||||
</if>
|
||||
<if test="triggerTimeEnd != null">
|
||||
AND t.trigger_time <![CDATA[ < ]]> #{triggerTimeEnd}
|
||||
</if>
|
||||
</trim>
|
||||
ORDER BY id DESC
|
||||
LIMIT #{offset}, #{pagesize}
|
||||
</select>
|
||||
|
||||
<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
|
||||
SELECT count(1)
|
||||
FROM xxl_job_qrtz_trigger_log AS t
|
||||
<trim prefix="WHERE" prefixOverrides="AND | OR" >
|
||||
<if test="jobName != null and jobName!=''">
|
||||
AND t.job_name = #{jobName}
|
||||
</if>
|
||||
<if test="triggerTimeStart != null">
|
||||
AND t.trigger_time <![CDATA[ > ]]> #{triggerTimeStart}
|
||||
</if>
|
||||
<if test="triggerTimeEnd != null">
|
||||
AND t.trigger_time <![CDATA[ < ]]> #{triggerTimeEnd}
|
||||
</if>
|
||||
</trim>
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -38,6 +38,8 @@
|
|||
<property name="order" value="0" />
|
||||
</bean>
|
||||
|
||||
<bean id="exceptionResolver" class="com.xxl.job.core.resolver.WebExceptionResolver" />
|
||||
|
||||
<!--
|
||||
// 自定义拦截器,支持SSO登陆拦截
|
||||
<mvc:interceptors>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<!-- sidebar menu: : style can be found in sidebar.less -->
|
||||
<ul class="sidebar-menu">
|
||||
<li class="header">常用模块</li>
|
||||
<li class="nav-click" ><a href="${request.contextPath}/job/"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
|
||||
<li class="nav-click" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
|
||||
<li class="nav-click" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
|
||||
<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-yellow"></i><span>使用教程</span></a></li>
|
||||
</ul>
|
||||
|
|
|
@ -30,6 +30,16 @@
|
|||
<section class="content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">任务组</span>
|
||||
<select class="form-control" id="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group}" >${group.desc}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
|
@ -128,16 +138,24 @@
|
|||
|
||||
<!-- job新增.模态框 -->
|
||||
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >新增调度信息</h4>
|
||||
<h4 class="modal-title" >新增任务调度信息</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-3 control-label">任务Key</label>
|
||||
<div class="col-sm-9"><input type="text" class="form-control" name="triggerKeyName" placeholder="请输入任务Key" minlength="4" maxlength="100" ></div>
|
||||
<label for="firstname" class="col-sm-2 control-label">任务组</label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group}" >${group.desc}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
<label for="firstname" class="col-sm-2 control-label">任务名</label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="triggerKeyName" placeholder="请输入任务Key" minlength="4" maxlength="100" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-3 control-label">任务Corn</label>
|
||||
|
@ -219,6 +237,6 @@
|
|||
<script src="${request.contextPath}/static/adminlte/plugins/daterangepicker/moment.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/plugins/daterangepicker/daterangepicker.js"></script>
|
||||
<script>var base_url = '${request.contextPath}';</script>
|
||||
<script src="${request.contextPath}/static/js/job.index.1.js"></script>
|
||||
<script src="${request.contextPath}/static/js/jobinfo.index.1.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -30,23 +30,33 @@
|
|||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="row">
|
||||
<div class="col-xs-5">
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">任务组</span>
|
||||
<select class="form-control" id="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group}" <#if jobInfo?exists && group == jobInfo.jobGroup>selected</#if> >${group.desc}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">任务名</span>
|
||||
<input type="text" class="form-control" id="jobName" value="${jobName}" autocomplete="on" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
调度时间
|
||||
</span>
|
||||
<input type="text" class="form-control" id="filterTime" readonly
|
||||
value="<#if triggerTimeStart?exists && triggerTimeEnd?exists >${triggerTimeStart?if_exists?string('yyyy-MM-dd HH:mm:ss')} - ${triggerTimeEnd?if_exists?string('yyyy-MM-dd HH:mm:ss')}</#if>" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-5">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
jobName
|
||||
</span>
|
||||
<input type="text" class="form-control" id="jobName" value="${jobName}" autocomplete="on" >
|
||||
value2="<#if triggerTimeStart?exists && triggerTimeEnd?exists >${triggerTimeStart?if_exists?string('yyyy-MM-dd HH:mm:ss')} - ${triggerTimeEnd?if_exists?string('yyyy-MM-dd HH:mm:ss')}</#if>" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-xs-2">
|
||||
<button class="btn btn-block btn-info" id="searchBtn">搜索</button>
|
||||
</div>
|
||||
|
@ -60,17 +70,18 @@
|
|||
<table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th>id</th>
|
||||
<th>jobName</th>
|
||||
<th>jobCron</th>
|
||||
<th>jobClass</th>
|
||||
<th>jobData</th>
|
||||
<th>triggerTime</th>
|
||||
<th>triggerStatus</th>
|
||||
<th>triggerMsg</th>
|
||||
<th>handleTime</th>
|
||||
<th>handleStatus</th>
|
||||
<th>handleMsg</th>
|
||||
<th name="id" >id</th>
|
||||
<th name="jobGroup" >任务组</th>
|
||||
<th name="jobName" >任务名</th>
|
||||
<th name="jobCron" >Cron</th>
|
||||
<th name="jobClass" >JobBean</th>
|
||||
<th name="jobData" >任务数据</th>
|
||||
<th name="triggerTime" >调度时间</th>
|
||||
<th name="triggerStatus" >调度结果</th>
|
||||
<th name="triggerMsg" >调度日志</th>
|
||||
<th name="handleTime" >执行时间</th>
|
||||
<th name="handleStatus" >执行结果</th>
|
||||
<th name="handleMsg" >执行日志</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
|
|
|
@ -5,7 +5,7 @@ $(function() {
|
|||
"processing" : true,
|
||||
"serverSide": true,
|
||||
"ajax": {
|
||||
url: base_url + "/job/pageList",
|
||||
url: base_url + "/jobinfo/pageList",
|
||||
data : function ( d ) {
|
||||
d.jobName = $('#jobName').val()
|
||||
}
|
|
@ -8,46 +8,66 @@ $(function() {
|
|||
"ajax": {
|
||||
url: base_url + "/joblog/pageList" ,
|
||||
data : function ( d ) {
|
||||
d.jobGroup = $('#jobGroup').val();
|
||||
d.jobName = $('#jobName').val();
|
||||
d.filterTime = $('#filterTime').val();
|
||||
d.jobName = $('#jobName').val()
|
||||
}
|
||||
},
|
||||
//"scrollX": true, // X轴滚动条,取消自适应
|
||||
"searching": false,
|
||||
"ordering": false,
|
||||
//"scrollX": false,
|
||||
"columns": [
|
||||
{ "data": 'id', "bSortable": false, "visible" : false},
|
||||
{ "data": 'jobName', "bSortable": false},
|
||||
{ "data": 'jobCron', "bSortable": false, "visible" : false},
|
||||
{ "data": 'jobClass', "bSortable": false, "visible" : false},
|
||||
{ "data": 'jobData', "bSortable": false, "visible" : false},
|
||||
{
|
||||
"data": 'jobGroup',
|
||||
"bSortable": false,
|
||||
"render": function ( data, type, row ) {
|
||||
var groupMenu = $("#jobGroup").find("option");
|
||||
for ( var index in $("#jobGroup").find("option")) {
|
||||
if ($(groupMenu[index]).attr('value') == data) {
|
||||
return $(groupMenu[index]).html();
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
},
|
||||
{ "data": 'jobName'},
|
||||
{ "data": 'jobCron', "visible" : false},
|
||||
{ "data": 'jobClass', "visible" : false},
|
||||
{
|
||||
"data": 'jobData',
|
||||
"visible" : false,
|
||||
"render": function ( data, type, row ) {
|
||||
return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
|
||||
}
|
||||
},
|
||||
{
|
||||
"data": 'triggerTime',
|
||||
"bSortable": false,
|
||||
"render": function ( data, type, row ) {
|
||||
return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
|
||||
}
|
||||
},
|
||||
{ "data": 'triggerStatus', "bSortable": false},
|
||||
{ "data": 'triggerMsg',"bSortable": false,
|
||||
{ "data": 'triggerStatus'},
|
||||
{
|
||||
"data": 'triggerMsg',
|
||||
"render": function ( data, type, row ) {
|
||||
return data?'<a class="logTips" href="javascript:;" >调度日志<span style="display:none;">'+ data +'</span></a>':"无";
|
||||
return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
|
||||
}
|
||||
},
|
||||
{
|
||||
"data": 'handleTime',
|
||||
"bSortable": false,
|
||||
"render": function ( data, type, row ) {
|
||||
return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
|
||||
}
|
||||
},
|
||||
{ "data": 'handleStatus',"bSortable": false},
|
||||
{ "data": 'handleMsg' , "bSortable": false,
|
||||
{
|
||||
"data": 'handleMsg',
|
||||
"render": function ( data, type, row ) {
|
||||
return data?'<a class="logTips" href="javascript:;" >执行日志<span style="display:none;">'+ data +'</span></a>':"无";
|
||||
return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
|
||||
}
|
||||
}
|
||||
],
|
||||
"searching": false,
|
||||
"ordering": true,
|
||||
"language" : {
|
||||
"sProcessing" : "处理中...",
|
||||
"sLengthMenu" : "每页 _MENU_ 条记录",
|
||||
|
@ -94,7 +114,7 @@ $(function() {
|
|||
'最近7日': [moment().subtract('days', 6), moment()],
|
||||
'最近30日': [moment().subtract('days', 29), moment()]
|
||||
},
|
||||
opens : 'right', //日期选择框的弹出位置
|
||||
opens : 'left', //日期选择框的弹出位置
|
||||
locale : {
|
||||
customRangeLabel : '自定义',
|
||||
applyLabel : '确定',
|
||||
|
@ -106,6 +126,7 @@ $(function() {
|
|||
firstDay : 1
|
||||
}
|
||||
});
|
||||
$('#filterTime').val( moment(new Date()).format("YYYY-MM-DD 00:00:00") + ' - ' + moment(new Date()).format("YYYY-MM-DD HH:mm:ss") );
|
||||
|
||||
// 搜索按钮
|
||||
$('#searchBtn').on('click', function(){
|
||||
|
|
Loading…
Reference in New Issue