AbstractQuartzJob.java 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
  24. /**
  25. * 线程本地变量
  26. */
  27. private static ThreadLocal<Date> threadLocal = new ThreadLocal<>();
  28. @Override
  29. public void execute(JobExecutionContext context) throws JobExecutionException {
  30. SysJob sysJob = new SysJob();
  31. BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
  32. try {
  33. before(context, sysJob);
  34. if (sysJob != null) {
  35. doExecute(context, sysJob);
  36. }
  37. after(context, sysJob, null);
  38. } catch (Exception e) {
  39. log.error("任务执行异常 - :", e);
  40. after(context, sysJob, e);
  41. }
  42. }
  43. /**
  44. * 执行前
  45. *
  46. * @param context 工作执行上下文对象
  47. * @param sysJob 系统计划任务
  48. */
  49. protected void before(JobExecutionContext context, SysJob sysJob) {
  50. threadLocal.set(new Date());
  51. }
  52. /**
  53. * 执行后
  54. *
  55. * @param context 工作执行上下文对象
  56. * @param sysJob 系统计划任务
  57. */
  58. protected void after(JobExecutionContext context, SysJob sysJob, Exception e) {
  59. Date startTime = threadLocal.get();
  60. threadLocal.remove();
  61. final SysJobLog sysJobLog = new SysJobLog();
  62. sysJobLog.setJobName(sysJob.getJobName());
  63. sysJobLog.setJobGroup(sysJob.getJobGroup());
  64. sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
  65. sysJobLog.setStartTime(startTime);
  66. sysJobLog.setStopTime(new Date());
  67. long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime();
  68. sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
  69. if (e != null) {
  70. sysJobLog.setStatus(Constants.FAIL);
  71. String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000);
  72. sysJobLog.setExceptionInfo(errorMsg);
  73. } else {
  74. sysJobLog.setStatus(Constants.SUCCESS);
  75. }
  76. // 写入数据库当中
  77. SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
  78. }
  79. /**
  80. * 执行方法,由子类重载
  81. *
  82. * @param context 工作执行上下文对象
  83. * @param sysJob 系统计划任务
  84. * @throws Exception 执行过程中的异常
  85. */
  86. protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception;
  87. }