| | |
| | | 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.Job; |
| | | import org.quartz.JobDataMap; |
| | | import org.quartz.JobExecutionContext; |
| | | import org.quartz.JobExecutionException; |
| | | import org.quartz.*; |
| | | |
| | | import java.lang.reflect.InvocationTargetException; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * quartz任务类 |
| | |
| | | /** |
| | | * 任务名称 |
| | | */ |
| | | @Getter |
| | | private String name; |
| | | /** |
| | | * 任务分组 |
| | | */ |
| | | @Getter |
| | | private String group; |
| | | /** |
| | | * 自定义参数 |
| | | */ |
| | | @Getter |
| | | private JobDataMap jobDataMap; |
| | | |
| | | |
| | |
| | | * 构建QuartzJob对象 |
| | | * @return |
| | | */ |
| | | public QuartzJob buildQuartzJob() { |
| | | return buildQuartzJob(QuartzEnum.JOB_NAME.getValue()); |
| | | } |
| | | public abstract QuartzJob buildQuartzJob(); |
| | | |
| | | |
| | | |
| | |
| | | * @param name 任务名称 |
| | | * @return |
| | | */ |
| | | public QuartzJob buildQuartzJob(String name) { |
| | | return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue()); |
| | | } |
| | | public abstract QuartzJob buildQuartzJob(String name); |
| | | |
| | | |
| | | |
| | |
| | | * @param group 任务分组名称 |
| | | * @return |
| | | */ |
| | | public QuartzJob buildQuartzJob(String name, String group) { |
| | | return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue(), null); |
| | | } |
| | | public abstract QuartzJob buildQuartzJob(String name, String group); |
| | | |
| | | /** |
| | | * 构建QuartzJob对象 |
| | |
| | | * @param jobDataMap 自定义参数 |
| | | * @return |
| | | */ |
| | | public QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap) { |
| | | if(ToolUtil.isNotEmpty(name)){ |
| | | this.name = name; |
| | | }else{ |
| | | this.name = QuartzEnum.JOB_NAME.getValue(); |
| | | } |
| | | if(ToolUtil.isNotEmpty(group)){ |
| | | this.group = group; |
| | | }else{ |
| | | this.group = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | } |
| | | this.jobDataMap = jobDataMap; |
| | | return this; |
| | | } |
| | | public abstract QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap); |
| | | |
| | | /** |
| | | * 需要执行的任务的业务逻辑方法 |
| | |
| | | */ |
| | | public abstract void run(JobExecutionContext jobExecutionContext); |
| | | |
| | | /** |
| | | * 执行器执行任务调用的方式 |
| | | * @param jobExecutionContext 定时任务上下文对象 |
| | | * @throws JobExecutionException |
| | | */ |
| | | @Override |
| | | public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { |
| | | String name = jobExecutionContext.getJobDetail().getKey().getName(); |
| | | log.info(name + " scheduled task start!"); |
| | | run(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(); |
| | | } |
| | | } |
| | | } |