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 *

* 1. 此类作为所有任务的执行入口,其他要执行的具体逻辑应该注入spring,然后通过此 通过反射调用到具体任务执行类
* 2. sysJob包含着要执行的具体逻辑类的信息,以及方法,参数等信息,此案例维护在数据库中
* 3. 通过更改数据库数据,动态变更quartz中的任务
* 4. 目前仅仅做了无参构造器的方法执行,后续补充
*

*/ 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); } } }