懒羊羊
2023-08-30 1ac2bc1590406d9babec036e154d8d08f34a6aa1
提交 | 用户 | 时间
1ac2bc 1 package cn.stylefeng.guns.modular.zsx.bs.job.quartz;
2
3 import cn.hutool.extra.spring.SpringUtil;
4 import cn.stylefeng.guns.modular.zsx.bs.job.constant.QuartzEnum;
5 import cn.stylefeng.guns.modular.zsx.bs.job.entity.SysJob;
6 import org.quartz.Job;
7 import org.quartz.JobExecutionContext;
8 import org.quartz.JobExecutionException;
9
10 import java.lang.reflect.Method;
11
12 /**
13  * @author fulin
14  * @since 2023/6/14 15:10
15  * <p>
16  * 1. 此类作为所有任务的执行入口,其他要执行的具体逻辑应该注入spring,然后通过此 通过反射调用到具体任务执行类 <br>
17  * 2. sysJob包含着要执行的具体逻辑类的信息,以及方法,参数等信息,此案例维护在数据库中<br>
18  * 3. 通过更改数据库数据,动态变更quartz中的任务<br>
19  * 4. 目前仅仅做了无参构造器的方法执行,后续补充<br>
20  * </p>
21  */
22 public class QuartzJob implements Job {
23
24     @Override
25     public void execute(JobExecutionContext context) throws JobExecutionException {
26         // 获取任务执行参数
27         SysJob sysJob = (SysJob) context.getJobDetail().getJobDataMap().get(QuartzEnum.jobKey);
28
29         // invokeTarget 应该符合 类.方法名 例如 task.sout()
30         String invokeTarget = sysJob.getInvokeTarget();
31         String beanName = invokeTarget.split("\\.")[0];
32         String temp = invokeTarget.split("\\.")[1];
33         String methodName = temp.substring(0, temp.indexOf("("));
34
35         Object bean = SpringUtil.getBean(beanName);
36         Method method = null;
37         try {
38             method = bean.getClass().getMethod(methodName);
39             method.invoke(bean);
40         } catch (Exception e) {
41             e.printStackTrace();
42             throw new RuntimeException(e);
43         }
44     }
45 }