You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							107 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
	
	
							107 lines
						
					
					
						
							3.4 KiB
						
					
					
				package com.ruoyi.quartz.util; | 
						|
 | 
						|
import java.util.Date; | 
						|
import org.quartz.Job; | 
						|
import org.quartz.JobExecutionContext; | 
						|
import org.quartz.JobExecutionException; | 
						|
import org.slf4j.Logger; | 
						|
import org.slf4j.LoggerFactory; | 
						|
import com.ruoyi.common.constant.Constants; | 
						|
import com.ruoyi.common.constant.ScheduleConstants; | 
						|
import com.ruoyi.common.utils.ExceptionUtil; | 
						|
import com.ruoyi.common.utils.StringUtils; | 
						|
import com.ruoyi.common.utils.bean.BeanUtils; | 
						|
import com.ruoyi.common.utils.spring.SpringUtils; | 
						|
import com.ruoyi.quartz.domain.SysJob; | 
						|
import com.ruoyi.quartz.domain.SysJobLog; | 
						|
import com.ruoyi.quartz.service.ISysJobLogService; | 
						|
 | 
						|
/** | 
						|
 * 抽象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 | 
						|
    { | 
						|
        SysJob sysJob = new SysJob(); | 
						|
        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, SysJob sysJob) | 
						|
    { | 
						|
        threadLocal.set(new Date()); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * 执行后 | 
						|
     * | 
						|
     * @param context 工作执行上下文对象 | 
						|
     * @param sysJob 系统计划任务 | 
						|
     */ | 
						|
    protected void after(JobExecutionContext context, SysJob sysJob, Exception e) | 
						|
    { | 
						|
        Date startTime = threadLocal.get(); | 
						|
        threadLocal.remove(); | 
						|
 | 
						|
        final SysJobLog sysJobLog = new SysJobLog(); | 
						|
        sysJobLog.setJobName(sysJob.getJobName()); | 
						|
        sysJobLog.setJobGroup(sysJob.getJobGroup()); | 
						|
        sysJobLog.setInvokeTarget(sysJob.getInvokeTarget()); | 
						|
        sysJobLog.setStartTime(startTime); | 
						|
        sysJobLog.setStopTime(new Date()); | 
						|
        long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime(); | 
						|
        sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒"); | 
						|
        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, SysJob sysJob) throws Exception; | 
						|
}
 | 
						|
 |