java学习心得——Quartz 自定义定时器的操作
2021-01-16 07:15
标签:判断 tab pac int 自己的 eject 实体 fast task 最近在邮件提醒的业务里,需要根据后台每个项目的配置定时的向项目联系人推送邮件提醒,这时我明白需要定时任务了,作为java小白,我向同事做了咨询,推荐我使用Quartz,以下便是我在项目里的学习心得。 首先配置文件: 依赖的jar包 配置文件: 以上就是我本次需求的处理,说实话,我只是在照葫芦画瓢,以后的项目之余我会逐步的去补充。 另外我和原创都是单台的服务器,所以没有考虑到集群的情况下。 原创地址:https://www.cnblogs.com/likun10579/p/10896831.html 谢谢挖坑大王的分享。@挖坑大王 java学习心得——Quartz 自定义定时器的操作 标签:判断 tab pac int 自己的 eject 实体 fast task 原文地址:https://www.cnblogs.com/qzzy/p/12926439.html
quartzManager定义自己的的定时器管理类
1.读取数据库的定时任务的设置数据
2.添加新的定时任务
3.删除已取消的定时任务
4.更新已有的定时任务package com.imaster.admin.web.schemajob;
import com.imaster.admin.model.vo.TaskVo;
import com.imaster.admin.shared.service.version2.ExhibitorReserveExhibitionService;
import com.imaster.constant.ApplicationConfig;
import com.imaster.shared.enums.TaskTypeEnum;
import com.imaster.shared.model.ExhibitorReserveExhibition;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.CronTriggerBean;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author wanghh
* 2020/5/9 11:45
*/
public class QuartzManager implements BeanFactoryAware {
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(ApplicationConfig.SERVER_NAME);
private Scheduler scheduler;
private static BeanFactory beanFactory;
@Autowired
ExhibitorReserveExhibitionService reserveExhibitionService;
/**
* 定时要执行的方法类。
*/
public void reScheduleJob() {
// 1.读取数据库中的任务列表。
//获取短信定时任务
List
QuartzJobFactory 定义了具体定时任务的执行管理
所有的定时任务都会在时间点执行这个类的execute(),然后我们根据定时任务的TaskType来确定具体的任务,另外注意我这边是直接将我的参数作为taskId了,所有我传入的参数是taskId,如果可以根据自己的业务需要在TaskVO中补充自己的参数package com.imaster.admin.web.schemajob;
import com.alibaba.fastjson.JSON;
import com.imaster.admin.model.vo.TaskVo;
import com.imaster.admin.web.biz.ExhibitorReserveBiz;
import com.imaster.constant.ApplicationConfig;
import com.imaster.shared.enums.TaskTypeEnum;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Author wanghh
* 2020/5/9 12:07
*/
public class QuartzJobFactory implements Job {
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(ApplicationConfig.SERVER_NAME);
@Autowired
private ExhibitorReserveBiz exhibitorReserveBiz;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
TaskVo taskVo = (TaskVo) jobDataMap.get("task");
logger.info("定时任务开始执行。。。。。。。。。。。" + JSON.toJSONString(taskVo));
if (TaskTypeEnum.EXHIBITOR_RESERVE.getCode().equals(taskVo.getTaskType())) {
logger.info("zhangshangbaoming job=======" + taskVo.getTaskId());
exhibitorReserveBiz.sendAcceptTimeEmail(taskVo.getTaskId());
//msgSendSchemaService.sendSchemaMsg(taskVo.getTaskId());
}
}
}
JobAdapter 这个类其实我没有明白,只能邯郸学步,请见谅,看别人的注释吧。
package com.imaster.admin.web.schemajob;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
/**
* @Author wanghh
* 2020/5/11 10:17
*/
public class JobAdapter extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
//进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
TaskVo 实体类
package com.imaster.admin.model.vo;
import lombok.Data;
/**
* @Author wanghh
* 2020/5/9 11:50
*/
@Data
public class TaskVo {
public String taskId;
public String taskType;
public String cronExpression;
public String state;
}
文章标题:java学习心得——Quartz 自定义定时器的操作
文章链接:http://soscw.com/index.php/essay/42616.html