|
@@ -18,14 +18,14 @@
|
|
|
package net.yyc.quartz.util;
|
|
package net.yyc.quartz.util;
|
|
|
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import lombok.SneakyThrows;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import net.yyc.quartz.constants.QuartzEnum;
|
|
import net.yyc.quartz.constants.QuartzEnum;
|
|
|
import net.yyc.quartz.entity.SysJob;
|
|
import net.yyc.quartz.entity.SysJob;
|
|
|
import net.yyc.quartz.entity.SysJobLog;
|
|
import net.yyc.quartz.entity.SysJobLog;
|
|
|
import net.yyc.quartz.event.SysJobLogEvent;
|
|
import net.yyc.quartz.event.SysJobLogEvent;
|
|
|
import net.yyc.quartz.service.SysJobService;
|
|
import net.yyc.quartz.service.SysJobService;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
|
|
-import lombok.SneakyThrows;
|
|
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.aspectj.lang.annotation.Aspect;
|
|
import org.aspectj.lang.annotation.Aspect;
|
|
|
import org.quartz.CronTrigger;
|
|
import org.quartz.CronTrigger;
|
|
|
import org.quartz.Trigger;
|
|
import org.quartz.Trigger;
|
|
@@ -44,83 +44,80 @@ import java.time.ZoneId;
|
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
|
public class TaskInvokeUtil {
|
|
public class TaskInvokeUtil {
|
|
|
|
|
|
|
|
- private final ApplicationEventPublisher publisher;
|
|
|
|
|
-
|
|
|
|
|
- @Autowired
|
|
|
|
|
- private SysJobService sysJobService;
|
|
|
|
|
|
|
+ private final ApplicationEventPublisher publisher;
|
|
|
|
|
|
|
|
- @SneakyThrows
|
|
|
|
|
- public void invokeMethod(SysJob sysJob, Trigger trigger, String executionId) {
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private SysJobService sysJobService;
|
|
|
|
|
|
|
|
- // 执行开始时间
|
|
|
|
|
- long startTime;
|
|
|
|
|
- // 执行结束时间
|
|
|
|
|
- long endTime;
|
|
|
|
|
- // 获取执行开始时间
|
|
|
|
|
- startTime = System.currentTimeMillis();
|
|
|
|
|
- // 更新定时任务表内的状态、执行时间、上次执行时间、下次执行时间等信息
|
|
|
|
|
- SysJob updateSysjob = new SysJob();
|
|
|
|
|
- updateSysjob.setJobId(sysJob.getJobId());
|
|
|
|
|
- // 日志
|
|
|
|
|
- SysJobLog sysJobLog = new SysJobLog();
|
|
|
|
|
- sysJobLog.setUuid(executionId);
|
|
|
|
|
- sysJobLog.setJobId(sysJob.getJobId());
|
|
|
|
|
- sysJobLog.setJobName(sysJob.getJobName());
|
|
|
|
|
- sysJobLog.setJobGroup(sysJob.getJobGroup());
|
|
|
|
|
- sysJobLog.setJobOrder(sysJob.getJobOrder());
|
|
|
|
|
- sysJobLog.setJobType(sysJob.getJobType());
|
|
|
|
|
- sysJobLog.setExecutePath(sysJob.getExecutePath());
|
|
|
|
|
- sysJobLog.setClassName(sysJob.getClassName());
|
|
|
|
|
- sysJobLog.setMethodName(sysJob.getMethodName());
|
|
|
|
|
- sysJobLog.setMethodParamsValue(sysJob.getMethodParamsValue());
|
|
|
|
|
- sysJobLog.setCronExpression(sysJob.getCronExpression());
|
|
|
|
|
- sysJobLog.setTenantId(sysJob.getTenantId());
|
|
|
|
|
- try {
|
|
|
|
|
- // 执行任务
|
|
|
|
|
- ITaskInvok iTaskInvok = TaskInvokFactory.getInvoker(sysJob.getJobType());
|
|
|
|
|
- // 设置uuid
|
|
|
|
|
- sysJob.setUuid(executionId);
|
|
|
|
|
- // 直接执行任务
|
|
|
|
|
- iTaskInvok.invokMethod(sysJob);
|
|
|
|
|
|
|
+ @SneakyThrows
|
|
|
|
|
+ public void invokeMethod(SysJob sysJob, Trigger trigger, String executionId) {
|
|
|
|
|
|
|
|
- // 记录成功状态
|
|
|
|
|
- sysJobLog.setJobMessage(QuartzEnum.JOB_LOG_STATUS_SUCCESS.getDescription());
|
|
|
|
|
- sysJobLog.setJobLogStatus(QuartzEnum.JOB_LOG_STATUS_SUCCESS.getType());
|
|
|
|
|
- // 任务表信息更新
|
|
|
|
|
- updateSysjob.setJobExecuteStatus(QuartzEnum.JOB_LOG_STATUS_SUCCESS.getType());
|
|
|
|
|
- }
|
|
|
|
|
- catch (Throwable e) {
|
|
|
|
|
- log.error("[QUARTZ] [{}] 任务失败 | jobId={} jobName={} error={}",
|
|
|
|
|
- executionId, sysJob.getJobId(), sysJob.getJobName(), e.getMessage(), e);
|
|
|
|
|
- // 记录失败状态
|
|
|
|
|
- sysJobLog.setJobMessage(QuartzEnum.JOB_LOG_STATUS_FAIL.getDescription());
|
|
|
|
|
- sysJobLog.setJobLogStatus(QuartzEnum.JOB_LOG_STATUS_FAIL.getType());
|
|
|
|
|
- sysJobLog.setExceptionInfo(StrUtil.sub(e.getMessage(), 0, 2000));
|
|
|
|
|
- // 任务表信息更新
|
|
|
|
|
- updateSysjob.setJobExecuteStatus(QuartzEnum.JOB_LOG_STATUS_FAIL.getType());
|
|
|
|
|
- }
|
|
|
|
|
- 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));
|
|
|
|
|
|
|
+ // 执行开始时间
|
|
|
|
|
+ long startTime;
|
|
|
|
|
+ // 执行结束时间
|
|
|
|
|
+ long endTime;
|
|
|
|
|
+ // 获取执行开始时间
|
|
|
|
|
+ startTime = System.currentTimeMillis();
|
|
|
|
|
+ // 更新定时任务表内的状态、执行时间、上次执行时间、下次执行时间等信息
|
|
|
|
|
+ SysJob updateSysjob = new SysJob();
|
|
|
|
|
+ updateSysjob.setJobId(sysJob.getJobId());
|
|
|
|
|
+ // 日志
|
|
|
|
|
+ SysJobLog sysJobLog = new SysJobLog();
|
|
|
|
|
+ sysJobLog.setUuid(executionId);
|
|
|
|
|
+ sysJobLog.setJobId(sysJob.getJobId());
|
|
|
|
|
+ sysJobLog.setJobName(sysJob.getJobName());
|
|
|
|
|
+ sysJobLog.setJobGroup(sysJob.getJobGroup());
|
|
|
|
|
+ sysJobLog.setJobOrder(sysJob.getJobOrder());
|
|
|
|
|
+ sysJobLog.setJobType(sysJob.getJobType());
|
|
|
|
|
+ sysJobLog.setExecutePath(sysJob.getExecutePath());
|
|
|
|
|
+ sysJobLog.setClassName(sysJob.getClassName());
|
|
|
|
|
+ sysJobLog.setMethodName(sysJob.getMethodName());
|
|
|
|
|
+ sysJobLog.setMethodParamsValue(sysJob.getMethodParamsValue());
|
|
|
|
|
+ sysJobLog.setCronExpression(sysJob.getCronExpression());
|
|
|
|
|
+ sysJobLog.setTenantId(sysJob.getTenantId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 执行任务
|
|
|
|
|
+ ITaskInvok iTaskInvok = TaskInvokFactory.getInvoker(sysJob.getJobType());
|
|
|
|
|
+ // 设置uuid
|
|
|
|
|
+ sysJob.setUuid(executionId);
|
|
|
|
|
+ // 直接执行任务
|
|
|
|
|
+ iTaskInvok.invokMethod(sysJob);
|
|
|
|
|
+ // 记录成功状态
|
|
|
|
|
+ sysJobLog.setJobMessage(QuartzEnum.JOB_LOG_STATUS_SUCCESS.getDescription());
|
|
|
|
|
+ sysJobLog.setJobLogStatus(QuartzEnum.JOB_LOG_STATUS_SUCCESS.getType());
|
|
|
|
|
+ // 任务表信息更新
|
|
|
|
|
+ updateSysjob.setJobExecuteStatus(QuartzEnum.JOB_LOG_STATUS_SUCCESS.getType());
|
|
|
|
|
+ } catch (Throwable e) {
|
|
|
|
|
+ log.error("[QUARTZ] [{}] 任务失败 | jobId={} jobName={} error={}",
|
|
|
|
|
+ executionId, sysJob.getJobId(), sysJob.getJobName(), e.getMessage(), e);
|
|
|
|
|
+ // 记录失败状态
|
|
|
|
|
+ sysJobLog.setJobMessage(QuartzEnum.JOB_LOG_STATUS_FAIL.getDescription());
|
|
|
|
|
+ sysJobLog.setJobLogStatus(QuartzEnum.JOB_LOG_STATUS_FAIL.getType());
|
|
|
|
|
+ sysJobLog.setExceptionInfo(StrUtil.sub(e.getMessage(), 0, 2000));
|
|
|
|
|
+ // 任务表信息更新
|
|
|
|
|
+ updateSysjob.setJobExecuteStatus(QuartzEnum.JOB_LOG_STATUS_FAIL.getType());
|
|
|
|
|
+ } 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));
|
|
|
|
|
|
|
|
- if (QuartzEnum.JOB_LOG_STATUS_SUCCESS.getType().equals(sysJobLog.getJobLogStatus())) {
|
|
|
|
|
- log.info("[QUARTZ] [{}] 任务完成 | jobId={} jobName={} 耗时={}ms",
|
|
|
|
|
- executionId, sysJob.getJobId(), sysJob.getJobName(), endTime - startTime);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (QuartzEnum.JOB_LOG_STATUS_SUCCESS.getType().equals(sysJobLog.getJobLogStatus())) {
|
|
|
|
|
+ log.info("[QUARTZ] [{}] 任务完成 | jobId={} jobName={} 耗时={}ms",
|
|
|
|
|
+ executionId, sysJob.getJobId(), sysJob.getJobName(), endTime - startTime);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- publisher.publishEvent(new SysJobLogEvent(sysJobLog));
|
|
|
|
|
- sysJobService.updateById(updateSysjob);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ publisher.publishEvent(new SysJobLogEvent(sysJobLog));
|
|
|
|
|
+ sysJobService.updateById(updateSysjob);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|