AbstractQuartzJob.java 3.4 KB

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