|
|
@@ -0,0 +1,107 @@
|
|
|
+package com.nb.web.service.quartz.util;
|
|
|
+
|
|
|
+import com.nb.web.service.quartz.constant.Constants;
|
|
|
+import com.nb.web.service.quartz.constant.ScheduleConstants;
|
|
|
+import com.nb.web.service.quartz.job.po.SysJobPO;
|
|
|
+import com.nb.web.service.quartz.jobLog.po.SysJobLogPO;
|
|
|
+import com.nb.web.service.quartz.jobLog.service.ISysJobLogService;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.quartz.Job;
|
|
|
+import org.quartz.JobExecutionContext;
|
|
|
+import org.quartz.JobExecutionException;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 抽象quartz调用
|
|
|
+ *
|
|
|
+ * @author ruoyi
|
|
|
+ */
|
|
|
+public abstract class AbstractQuartzJob implements Job
|
|
|
+{
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 线程本地变量
|
|
|
+ */
|
|
|
+ private static ThreadLocal<Date> threadLocal = new ThreadLocal<>();
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void execute(JobExecutionContext context) throws JobExecutionException
|
|
|
+ {
|
|
|
+ SysJobPO sysJob = new SysJobPO();
|
|
|
+ BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
|
|
|
+ try
|
|
|
+ {
|
|
|
+ before(context, sysJob);
|
|
|
+ if (sysJob != null)
|
|
|
+ {
|
|
|
+ doExecute(context, sysJob);
|
|
|
+ }
|
|
|
+ after(context, sysJob, null);
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ log.error("任务执行异常 - :", e);
|
|
|
+ after(context, sysJob, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行前
|
|
|
+ *
|
|
|
+ * @param context 工作执行上下文对象
|
|
|
+ * @param sysJob 系统计划任务
|
|
|
+ */
|
|
|
+ protected void before(JobExecutionContext context, SysJobPO sysJob)
|
|
|
+ {
|
|
|
+ threadLocal.set(new Date());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行后
|
|
|
+ *
|
|
|
+ * @param context 工作执行上下文对象
|
|
|
+ * @param sysJob 系统计划任务
|
|
|
+ */
|
|
|
+ protected void after(JobExecutionContext context, SysJobPO sysJob, Exception e)
|
|
|
+ {
|
|
|
+ Date startTime = threadLocal.get();
|
|
|
+ threadLocal.remove();
|
|
|
+
|
|
|
+ final SysJobLogPO sysJobLog = new SysJobLogPO();
|
|
|
+ sysJobLog.setJobName(sysJob.getJobName());
|
|
|
+ sysJobLog.setJobGroup(sysJob.getJobGroup());
|
|
|
+ sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
|
|
|
+ sysJobLog.setStartTime(startTime);
|
|
|
+ sysJobLog.setEndTime(new Date());
|
|
|
+ long runMs = sysJobLog.getEndTime().getTime() - sysJobLog.getStartTime().getTime();
|
|
|
+ sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
|
|
|
+ sysJobLog.setId(String.valueOf(UUID.randomUUID().toString().replace("-", "").substring(0, 16).hashCode()& 0xFFFF));
|
|
|
+ if (e != null)
|
|
|
+ {
|
|
|
+ sysJobLog.setStatus(Constants.FAIL);
|
|
|
+ String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000);
|
|
|
+ sysJobLog.setExceptionInfo(errorMsg);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ sysJobLog.setStatus(Constants.SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 写入数据库当中
|
|
|
+// SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行方法,由子类重载
|
|
|
+ *
|
|
|
+ * @param context 工作执行上下文对象
|
|
|
+ * @param sysJob 系统计划任务
|
|
|
+ * @throws Exception 执行过程中的异常
|
|
|
+ */
|
|
|
+ protected abstract void doExecute(JobExecutionContext context, SysJobPO sysJob) throws Exception;
|
|
|
+}
|