package cn.stylefeng.guns.modular.zsx.bs.job.quartz;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
import cn.stylefeng.guns.modular.zsx.bs.job.constant.QuartzEnum;
|
import cn.stylefeng.guns.modular.zsx.bs.job.entity.SysJob;
|
import org.quartz.Job;
|
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionException;
|
|
import java.lang.reflect.Method;
|
|
/**
|
* @author fulin
|
* @since 2023/6/14 15:10
|
* <p>
|
* 1. 此类作为所有任务的执行入口,其他要执行的具体逻辑应该注入spring,然后通过此 通过反射调用到具体任务执行类 <br>
|
* 2. sysJob包含着要执行的具体逻辑类的信息,以及方法,参数等信息,此案例维护在数据库中<br>
|
* 3. 通过更改数据库数据,动态变更quartz中的任务<br>
|
* 4. 目前仅仅做了无参构造器的方法执行,后续补充<br>
|
* </p>
|
*/
|
public class QuartzJob implements Job {
|
|
@Override
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
// 获取任务执行参数
|
SysJob sysJob = (SysJob) context.getJobDetail().getJobDataMap().get(QuartzEnum.jobKey);
|
|
// invokeTarget 应该符合 类.方法名 例如 task.sout()
|
String invokeTarget = sysJob.getInvokeTarget();
|
String beanName = invokeTarget.split("\\.")[0];
|
String temp = invokeTarget.split("\\.")[1];
|
String methodName = temp.substring(0, temp.indexOf("("));
|
|
Object bean = SpringUtil.getBean(beanName);
|
Method method = null;
|
try {
|
method = bean.getClass().getMethod(methodName);
|
method.invoke(bean);
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e);
|
}
|
}
|
}
|