AbstractQuartzJob.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.ruoyi.quartz.util;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.exceptions.ExceptionUtil;
  4. import com.ruoyi.common.constant.Constants;
  5. import com.ruoyi.common.constant.ScheduleConstants;
  6. import com.ruoyi.common.utils.StringUtils;
  7. import com.ruoyi.common.utils.spring.SpringUtils;
  8. import com.ruoyi.quartz.domain.SysJob;
  9. import com.ruoyi.quartz.domain.SysJobLog;
  10. import com.ruoyi.quartz.service.ISysJobLogService;
  11. import org.quartz.Job;
  12. import org.quartz.JobExecutionContext;
  13. import org.quartz.JobExecutionException;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import java.util.Date;
  17. /**
  18. * 抽象quartz调用
  19. *
  20. * @deprecated 3.5.0删除 迁移至xxl-job
  21. * @author ruoyi
  22. */
  23. public abstract class AbstractQuartzJob implements Job
  24. {
  25. private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
  26. /**
  27. * 线程本地变量
  28. */
  29. private static ThreadLocal<Date> threadLocal = new ThreadLocal<>();
  30. @Override
  31. public void execute(JobExecutionContext context) throws JobExecutionException
  32. {
  33. SysJob sysJob = new SysJob();
  34. BeanUtil.copyProperties(context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES),sysJob);
  35. try
  36. {
  37. before(context, sysJob);
  38. if (StringUtils.isNotNull(sysJob))
  39. {
  40. doExecute(context, sysJob);
  41. }
  42. after(context, sysJob, null);
  43. }
  44. catch (Exception e)
  45. {
  46. log.error("任务执行异常 - :", e);
  47. after(context, sysJob, e);
  48. }
  49. }
  50. /**
  51. * 执行前
  52. *
  53. * @param context 工作执行上下文对象
  54. * @param sysJob 系统计划任务
  55. */
  56. protected void before(JobExecutionContext context, SysJob sysJob)
  57. {
  58. threadLocal.set(new Date());
  59. }
  60. /**
  61. * 执行后
  62. *
  63. * @param context 工作执行上下文对象
  64. * @param sysJob 系统计划任务
  65. */
  66. protected void after(JobExecutionContext context, SysJob sysJob, Exception e)
  67. {
  68. Date startTime = threadLocal.get();
  69. threadLocal.remove();
  70. final SysJobLog sysJobLog = new SysJobLog();
  71. sysJobLog.setJobName(sysJob.getJobName());
  72. sysJobLog.setJobGroup(sysJob.getJobGroup());
  73. sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
  74. sysJobLog.setStartTime(startTime);
  75. sysJobLog.setStopTime(new Date());
  76. long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime();
  77. sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
  78. if (e != null)
  79. {
  80. sysJobLog.setStatus(Constants.FAIL);
  81. String errorMsg = StringUtils.substring(ExceptionUtil.stacktraceToString(e), 0, 2000);
  82. sysJobLog.setExceptionInfo(errorMsg);
  83. }
  84. else
  85. {
  86. sysJobLog.setStatus(Constants.SUCCESS);
  87. }
  88. // 写入数据库当中
  89. SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
  90. }
  91. /**
  92. * 执行方法,由子类重载
  93. *
  94. * @param context 工作执行上下文对象
  95. * @param sysJob 系统计划任务
  96. * @throws Exception 执行过程中的异常
  97. */
  98. protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception;
  99. }