package com.project.quartz.util;
|
|
import com.project.quartz.domain.SysJobDelay;
|
import com.project.quartz.service.ISysJobDelayService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.quartz.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Date;
|
import java.util.Map;
|
|
import static com.project.common.constant.ScheduleConstants.ORDER_CANCEL;
|
|
@Slf4j
|
@Component
|
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
public class DelayScheduleUtils {
|
|
private final ISysJobDelayService delayService;
|
private final Scheduler scheduler;
|
|
private static final String JOB_GROUP_NAME = "DEFAULT_JOB_GROUP_NAME";
|
|
private static final String TRIGGER_GROUP_NAME = "DEFAULT_TRIGGER_GROUP_NAME";
|
|
|
|
/**
|
* addSimpleJob简略版有额外参数
|
*
|
* @param jobName 任务名称
|
* @param startTime 执行时间
|
* @param extraParam 额外参数
|
* @param jobClass 任务类
|
*/
|
public void addSimpleJob(String jobName, Date startTime, Map<String, Object> extraParam, Class<? extends Job> jobClass)
|
{
|
|
addSimpleJob(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME, startTime, extraParam, jobClass);
|
}
|
|
|
/**
|
* 添加简单定时任务
|
*/
|
public void addSimpleJob(String jobName, String jobGroup, String triggerName, String triggerGroup, Date startTime, Map<String, Object> extraParam, Class<? extends Job> jobClass)
|
{
|
try {
|
JobDetail jobDetail = JobBuilder
|
.newJob(jobClass)
|
.withIdentity(jobName, jobGroup)
|
.build();
|
if (extraParam != null) {
|
jobDetail.getJobDataMap().putAll(extraParam);
|
}
|
SimpleTrigger simpleTrigger = (SimpleTrigger) TriggerBuilder
|
.newTrigger()
|
.withIdentity(triggerName, triggerGroup)
|
.startAt(startTime)
|
.build();
|
scheduler.scheduleJob(jobDetail, simpleTrigger);
|
} catch (SchedulerException e) {
|
e.printStackTrace();
|
}
|
}
|
|
|
|
/**
|
* 删除单个任务
|
*/
|
public void deleteJob(String orderNo) {
|
//取消延时任务
|
delayService.remove(delayService.lq().eq(SysJobDelay::getJobOrder,orderNo));
|
try {
|
scheduler.pauseTrigger(TriggerKey.triggerKey(ORDER_CANCEL+orderNo, TRIGGER_GROUP_NAME));// 停止触发器
|
scheduler.unscheduleJob(TriggerKey.triggerKey(ORDER_CANCEL+orderNo, TRIGGER_GROUP_NAME));// 移除触发器
|
scheduler.deleteJob(JobKey.jobKey(ORDER_CANCEL+orderNo, JOB_GROUP_NAME));// 删除任务
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
}
|