package com.yeshi.fanli.job;
|
|
import java.util.Iterator;
|
import java.util.Map;
|
|
import org.quartz.CronScheduleBuilder;
|
import org.quartz.CronTrigger;
|
import org.quartz.JobBuilder;
|
import org.quartz.JobDetail;
|
import org.quartz.JobKey;
|
import org.quartz.Scheduler;
|
import org.quartz.TriggerBuilder;
|
import org.quartz.TriggerKey;
|
import org.springframework.stereotype.Component;
|
|
import com.yeshi.fanli.log.LogHelper;
|
|
@Component
|
public class QuartzManager {
|
|
private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
|
private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
|
|
/**
|
* 创建任务:使用默认 任务组、定时组名
|
* @param sched
|
* @param jobName
|
* @param time
|
* @param params
|
* @param cls
|
*/
|
public static void addJob(Scheduler sched, @SuppressWarnings("rawtypes") Class cls, String jobName,
|
String time, Map<String, String> params) {
|
try {
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
|
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
|
|
if (trigger == null) {
|
LogHelper.test("------addJob---任务创建-----" + jobName + "------- ");
|
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(jobName, JOB_GROUP_NAME).build();
|
if (params != null) {
|
Iterator<String> its = params.keySet().iterator();
|
while (its.hasNext()) {
|
String key = its.next();
|
jobDetail.getJobDataMap().put(key, params.get(key));
|
}
|
}
|
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
|
trigger = TriggerBuilder.newTrigger().withIdentity(jobName, TRIGGER_GROUP_NAME)
|
.withSchedule(scheduleBuilder).build();
|
sched.scheduleJob(jobDetail, trigger);
|
}
|
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
|
|
|
/**
|
* 修改任务
|
*
|
* @param sched
|
* @param jobName
|
* @param jobGroupName
|
* @param triggerName
|
* @param triggerGroupName
|
* @param time
|
* @param params
|
* @param cls
|
*/
|
@SuppressWarnings("rawtypes")
|
public static void modifyJob(Scheduler sched, Class cls, String jobName,
|
String time, Map<String, String> params ) {
|
|
try {
|
|
LogHelper.test("------modifyJob---任务修改-----" + jobName + "------- ");
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
|
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
|
|
if (trigger == null) {
|
return;
|
}
|
|
// 删除原任务
|
removeJob(sched, jobName);
|
|
// 新建任务
|
addJob(sched, QualityFactoryJob.class, jobName, time, params);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e);
|
}
|
}
|
|
|
|
/**
|
* @Description: 修改一个任务的触发时间
|
*
|
* @param sched
|
* 调度器 *
|
* @param sched
|
* 调度器
|
* @param triggerName
|
* @param triggerGroupName
|
* @param time
|
*
|
* @Title: QuartzManager.java
|
*/
|
public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
|
try {
|
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
|
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
|
if (trigger == null) {
|
return;
|
}
|
// Trigger已存在,那么更新相应的定时设置
|
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
|
|
// 按新的cronExpression表达式重新构建trigger
|
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
|
|
// 按新的trigger重新设置job执行
|
sched.rescheduleJob(triggerKey, trigger);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
|
/**
|
* @Description: 移除一个任务
|
*
|
* @param sched
|
* 调度器
|
* @param jobName
|
* @param jobGroupName
|
* @param triggerName
|
* @param triggerGroupName
|
*
|
* @Title: QuartzManager.java
|
*/
|
public static void removeJob(Scheduler sched, String jobName) {
|
try {
|
|
LogHelper.test("------modifyJob---任务删除-----" + jobName + "------- ");
|
|
|
JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);
|
sched.pauseJob(jobKey);
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
|
|
sched.pauseTrigger(triggerKey); // 停止触发器
|
sched.unscheduleJob(triggerKey);// 移除触发器
|
|
sched.pauseJob(jobKey); // 停止任务
|
sched.deleteJob(jobKey);// 删除任务
|
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
/**
|
* @Description:启动所有定时任务
|
*
|
* @param sched
|
* 调度器
|
*
|
* @Title: QuartzManager.java
|
*/
|
public static void startJobs(Scheduler sched) {
|
try {
|
sched.start();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e);
|
}
|
}
|
|
/**
|
* @Description:关闭所有定时任务
|
*
|
*
|
* @param sched
|
* 调度器
|
*
|
*
|
* @Title: QuartzManager.java
|
*/
|
public static void shutdownJobs(Scheduler sched) {
|
try {
|
if (!sched.isShutdown()) {
|
sched.shutdown();
|
}
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
}
|