package com.stylefeng.guns.modular.system.util.quartz.model;
|
|
import com.alibaba.fastjson.JSON;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.util.SpringUtils;
|
import lombok.Data;
|
import lombok.Getter;
|
import lombok.extern.slf4j.Slf4j;
|
import org.quartz.*;
|
|
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.Method;
|
import java.util.Map;
|
|
/**
|
* quartz任务类
|
* @author zhibing.pu
|
* @Date 2024/3/20 11:14
|
*/
|
@Slf4j
|
@Data
|
public abstract class QuartzJob implements Job {
|
/**
|
* 任务名称
|
*/
|
private String name;
|
/**
|
* 任务分组
|
*/
|
private String group;
|
/**
|
* 自定义参数
|
*/
|
private JobDataMap jobDataMap;
|
|
|
/**
|
* 构建QuartzJob对象
|
* @return
|
*/
|
public abstract QuartzJob buildQuartzJob();
|
|
|
|
/**
|
* 构建QuartzJob对象
|
* @param name 任务名称
|
* @return
|
*/
|
public abstract QuartzJob buildQuartzJob(String name);
|
|
|
|
/**
|
* 构建QuartzJob对象
|
* @param name 任务名称
|
* @param group 任务分组名称
|
* @return
|
*/
|
public abstract QuartzJob buildQuartzJob(String name, String group);
|
|
/**
|
* 构建QuartzJob对象
|
* @param name 任务名称
|
* @param group 任务分组名称
|
* @param jobDataMap 自定义参数
|
* @return
|
*/
|
public abstract QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap);
|
|
/**
|
* 需要执行的任务的业务逻辑方法
|
* @param jobExecutionContext 定时任务上下文对象
|
*/
|
public abstract void run(JobExecutionContext jobExecutionContext);
|
|
|
@Override
|
public void execute(JobExecutionContext jobExecutionContext){
|
JobDetail jobDetail = jobExecutionContext.getJobDetail();
|
String name = jobDetail.getKey().getName();
|
log.info(name + " scheduled task start!\nJobDataMap:{}", JSON.toJSONString(jobDetail.getJobDataMap()));
|
try {
|
Class jobClass = jobDetail.getJobClass();
|
Method run = jobClass.getMethod("run", JobExecutionContext.class);
|
Object o = SpringUtils.getBean(jobClass);
|
Object invoke = run.invoke(o, jobExecutionContext);
|
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|