Merge https://gitee.ltd/Hccake/pigx into leng_dev
This commit is contained in:
commit
b998215e11
5 files changed
+107
-44
No files matched your search
@@ -408,6 +408,7 @@ INSERT INTO `sys_menu` VALUES (2830, '任务删除', 'job_sys_job_del', NULL, 28
|
||||
INSERT INTO `sys_menu` VALUES (2840, '任务暂停', 'job_sys_job_shutdown_job', NULL, 2800, '1', 0, '0', '1', '2018-05-15 21:35:18', '2019-03-25 11:50:18', '0');
|
||||
INSERT INTO `sys_menu` VALUES (2850, '任务开始', 'job_sys_job_start_job', NULL, 2800, '1', 0, '0', '1', '2018-05-15 21:35:18', '2019-03-25 11:50:35', '0');
|
||||
INSERT INTO `sys_menu` VALUES (2860, '任务刷新', 'job_sys_job_refresh_job', NULL, 2800, '1', 0, '0', '1', '2018-05-15 21:35:18', '2019-03-25 11:50:39', '0');
|
||||
INSERT INTO `sys_menu` VALUES (2870, '执行任务', 'job_sys_job_run_job', NULL, 2800, '1', 0, '0', '1', '2019-08-08 15:35:18', '2019-08-08 15:50:35', '0' );
|
||||
INSERT INTO `sys_menu` VALUES (3000, '系统监控', NULL, '/daemon', -1, 'icon-msnui-supervise', 2, '0', '0', '2018-07-27 01:13:21', '2018-09-28 08:53:24', '0');
|
||||
INSERT INTO `sys_menu` VALUES (3100, '服务监控', NULL, 'http://127.0.0.1:5001', 3000, 'icon-server', 0, '0', '0', '2018-06-26 10:50:32', '2019-05-01 23:54:05', '0');
|
||||
INSERT INTO `sys_menu` VALUES (3110, '缓存监控', NULL, '/monitor/redis/index', 3000, 'icon-qingchuhuancun', 1, '1', '0', '2019-05-08 23:51:27', '2019-06-24 15:17:45', '0');
|
||||
|
||||
+18
@@ -230,6 +230,24 @@ public class SysJobController {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 启动定时任务
|
||||
*
|
||||
* @param jobId
|
||||
* @return
|
||||
*/
|
||||
@SysLog("立刻执行定时任务")
|
||||
@PostMapping("/run-job/{id}")
|
||||
@PreAuthorize("@pms.hasPermission('job_sys_job_run_job')")
|
||||
@ApiOperation(value = "立刻执行定时任务")
|
||||
public R runJob(@PathVariable("id") Integer jobId) {
|
||||
SysJob querySysJob = this.sysJobService.getById(jobId);
|
||||
return TaskUtil.runOnce(scheduler, querySysJob)? R.ok(): R.failed();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 暂停定时任务
|
||||
*
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.pig4cloud.pigx.daemon.quartz.util;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.pig4cloud.pigx.common.core.util.SpringContextHolder;
|
||||
import com.pig4cloud.pigx.daemon.quartz.constant.enums.JobTypeQuartzEnum;
|
||||
import com.pig4cloud.pigx.daemon.quartz.exception.TaskException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2019/8/8 15:40
|
||||
* TaskInvok工厂类
|
||||
*/
|
||||
@Slf4j
|
||||
public class TaskInvokFactory {
|
||||
|
||||
/**
|
||||
* 根据对应jobType获取对应 invoker
|
||||
* @param jobType
|
||||
* @return
|
||||
* @throws TaskException
|
||||
*/
|
||||
public static ITaskInvok getInvoker(String jobType) throws TaskException {
|
||||
if (StrUtil.isBlank(jobType)) {
|
||||
log.info("获取TaskInvok传递参数有误,jobType:{}", jobType);
|
||||
throw new TaskException("");
|
||||
}
|
||||
|
||||
ITaskInvok iTaskInvok = null;
|
||||
if (JobTypeQuartzEnum.JAVA.getType().equals(jobType)) {
|
||||
iTaskInvok = SpringContextHolder.getBean("javaClassTaskInvok");
|
||||
} else if (JobTypeQuartzEnum.SPRING_BEAN.getType().equals(jobType)) {
|
||||
iTaskInvok = SpringContextHolder.getBean("springBeanTaskInvok");
|
||||
} else if (JobTypeQuartzEnum.REST.getType().equals(jobType)) {
|
||||
iTaskInvok = SpringContextHolder.getBean("restTaskInvok");
|
||||
} else if (JobTypeQuartzEnum.JAR.getType().equals(jobType)) {
|
||||
iTaskInvok = SpringContextHolder.getBean("jarTaskInvok");
|
||||
} else if (StrUtil.isBlank(jobType)) {
|
||||
log.info("定时任务类型无对应反射方式,反射类型:{}", jobType);
|
||||
throw new TaskException("");
|
||||
}
|
||||
|
||||
return iTaskInvok;
|
||||
}
|
||||
}
|
||||
+17
-40
@@ -19,18 +19,16 @@ package com.pig4cloud.pigx.daemon.quartz.util;
|
||||
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.pig4cloud.pigx.common.core.util.SpringContextHolder;
|
||||
import com.pig4cloud.pigx.daemon.quartz.constant.enums.JobTypeQuartzEnum;
|
||||
import com.pig4cloud.pigx.daemon.quartz.constant.enums.PigxQuartzEnum;
|
||||
import com.pig4cloud.pigx.daemon.quartz.entity.SysJob;
|
||||
import com.pig4cloud.pigx.daemon.quartz.entity.SysJobLog;
|
||||
import com.pig4cloud.pigx.daemon.quartz.event.SysJobLogEvent;
|
||||
import com.pig4cloud.pigx.daemon.quartz.exception.TaskException;
|
||||
import com.pig4cloud.pigx.daemon.quartz.service.SysJobService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.quartz.CronTrigger;
|
||||
import org.quartz.Trigger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
@@ -55,7 +53,6 @@ public class TaskInvokUtil {
|
||||
@SneakyThrows
|
||||
public void invokMethod(SysJob sysJob, Trigger trigger) {
|
||||
|
||||
ITaskInvok iTaskInvok;
|
||||
//执行开始时间
|
||||
long startTime;
|
||||
//执行结束时间
|
||||
@@ -79,54 +76,34 @@ public class TaskInvokUtil {
|
||||
sysJobLog.setCronExpression(sysJob.getCronExpression());
|
||||
sysJobLog.setTenantId(sysJob.getTenantId());
|
||||
try {
|
||||
if (StrUtil.isEmpty(sysJob.getJobType())) {
|
||||
log.info("定时任务类型无对应反射方式,反射类型为空");
|
||||
throw new TaskException("定时任务类型无对应反射方式,反射类型为空");
|
||||
}
|
||||
if (StrUtil.isNotEmpty(sysJob.getJobType()) && JobTypeQuartzEnum.JAVA.getType()
|
||||
.equals(sysJob.getJobType())) {
|
||||
iTaskInvok = SpringContextHolder.getBean("javaClassTaskInvok");
|
||||
iTaskInvok.invokMethod(sysJob);
|
||||
} else if (StrUtil.isNotEmpty(sysJob.getJobType()) && JobTypeQuartzEnum.SPRING_BEAN.getType()
|
||||
.equals(sysJob.getJobType())) {
|
||||
iTaskInvok = SpringContextHolder.getBean("springBeanTaskInvok");
|
||||
iTaskInvok.invokMethod(sysJob);
|
||||
} else if (StrUtil.isNotEmpty(sysJob.getJobType()) && JobTypeQuartzEnum.REST.getType()
|
||||
.equals(sysJob.getJobType())) {
|
||||
iTaskInvok = SpringContextHolder.getBean("restTaskInvok");
|
||||
iTaskInvok.invokMethod(sysJob);
|
||||
} else if (StrUtil.isNotEmpty(sysJob.getJobType()) && JobTypeQuartzEnum.JAR.getType()
|
||||
.equals(sysJob.getJobType())) {
|
||||
iTaskInvok = SpringContextHolder.getBean("jarTaskInvok");
|
||||
iTaskInvok.invokMethod(sysJob);
|
||||
} else {
|
||||
log.info("定时任务类型无对应反射方式,反射类型:{}", sysJob.getJobType());
|
||||
throw new TaskException("");
|
||||
}
|
||||
//获取执行结束时间
|
||||
endTime = System.currentTimeMillis();
|
||||
//执行任务
|
||||
ITaskInvok iTaskInvok = TaskInvokFactory.getInvoker(sysJob.getJobType());
|
||||
iTaskInvok.invokMethod(sysJob);
|
||||
|
||||
//记录成功状态
|
||||
sysJobLog.setJobMessage(PigxQuartzEnum.JOB_LOG_STATUS_SUCCESS.getDescription());
|
||||
sysJobLog.setJobLogStatus(PigxQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType());
|
||||
sysJobLog.setExecuteTime(String.valueOf(endTime - startTime));
|
||||
//任务表信息更新
|
||||
updateSysjob.setJobExecuteStatus(PigxQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType());
|
||||
updateSysjob.setStartTime(trigger.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
updateSysjob.setPreviousTime(trigger.getPreviousFireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
updateSysjob.setNextTime(trigger.getNextFireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
} catch (Throwable e) {
|
||||
//获取执行结束时间
|
||||
endTime = System.currentTimeMillis();
|
||||
log.error("定时任务执行失败,任务名称:{};任务组名:{},cron执行表达式:{},执行时间:{}", sysJob.getJobName(), sysJob.getJobGroup(), sysJob.getCronExpression(), new Date());
|
||||
//记录失败状态
|
||||
sysJobLog.setJobMessage(PigxQuartzEnum.JOB_LOG_STATUS_FAIL.getDescription());
|
||||
sysJobLog.setJobLogStatus(PigxQuartzEnum.JOB_LOG_STATUS_FAIL.getType());
|
||||
sysJobLog.setExecuteTime(String.valueOf(endTime - startTime));
|
||||
sysJobLog.setExceptionInfo(StrUtil.sub(e.getMessage(), 0, 2000));
|
||||
//任务表信息更新
|
||||
updateSysjob.setJobExecuteStatus(PigxQuartzEnum.JOB_LOG_STATUS_FAIL.getType());
|
||||
updateSysjob.setStartTime(trigger.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
updateSysjob.setPreviousTime(trigger.getPreviousFireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
updateSysjob.setNextTime(trigger.getNextFireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
} finally {
|
||||
//记录执行时间 立刻执行使用的是simpleTeigger
|
||||
if(trigger instanceof CronTrigger){
|
||||
updateSysjob.setStartTime(trigger.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
updateSysjob.setPreviousTime(trigger.getPreviousFireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
updateSysjob.setNextTime(trigger.getNextFireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
||||
}
|
||||
//记录执行时长
|
||||
endTime = System.currentTimeMillis();
|
||||
sysJobLog.setExecuteTime(String.valueOf(endTime - startTime));
|
||||
|
||||
publisher.publishEvent(new SysJobLogEvent(sysJobLog));
|
||||
sysJobService.updateById(updateSysjob);
|
||||
}
|
||||
|
||||
+25
-4
@@ -40,7 +40,7 @@ public class TaskUtil {
|
||||
* @param sysjob
|
||||
* @return
|
||||
*/
|
||||
public JobKey getJobKey(SysJob sysjob) {
|
||||
public static JobKey getJobKey(SysJob sysjob) {
|
||||
return JobKey.jobKey(sysjob.getJobName(), sysjob.getJobGroup());
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public class TaskUtil {
|
||||
* @param sysjob
|
||||
* @return
|
||||
*/
|
||||
public TriggerKey getTriggerKey(SysJob sysjob) {
|
||||
public static TriggerKey getTriggerKey(SysJob sysjob) {
|
||||
return TriggerKey.triggerKey(sysjob.getJobName(), sysjob.getJobGroup());
|
||||
}
|
||||
|
||||
@@ -63,9 +63,9 @@ public class TaskUtil {
|
||||
public void addOrUpateJob(SysJob sysjob, Scheduler scheduler) {
|
||||
CronTrigger trigger = null;
|
||||
try {
|
||||
JobKey jobKey = this.getJobKey(sysjob);
|
||||
JobKey jobKey = getJobKey(sysjob);
|
||||
//获得触发器
|
||||
TriggerKey triggerKey = this.getTriggerKey(sysjob);
|
||||
TriggerKey triggerKey = getTriggerKey(sysjob);
|
||||
trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
||||
//判断触发器是否存在(如果存在说明之前运行过但是在当前被禁用了,如果不存在说明一次都没运行过)
|
||||
if (trigger == null) {
|
||||
@@ -99,6 +99,27 @@ public class TaskUtil {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 立即执行一次任务
|
||||
*/
|
||||
public static boolean runOnce(Scheduler scheduler, SysJob sysJob) {
|
||||
try {
|
||||
//参数
|
||||
JobDataMap dataMap = new JobDataMap();
|
||||
dataMap.put(SCHEDULE_JOB_KEY.getType(), sysJob);
|
||||
|
||||
scheduler.triggerJob(getJobKey(sysJob), dataMap);
|
||||
} catch (SchedulerException e) {
|
||||
log.error("立刻执行定时任务,失败信息:{}", e.getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 暂停定时任务
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user