添加依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
工具类代码:
import java.util.Map;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
* 说明:定时任务管理类
*/
public class QuartzManager {
private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();//创建一个schedulerFactory工厂实例
private static String JOB_GROUP_NAME = "FH_JOBGROUP_NAME"; //任务组
private static String TRIGGER_GROUP_NAME = "FH_trigGERGROUP_NAME"; //触发器组
/**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param jobName 任务名
* @param cls 任务
* @param time 时间设置,参考quartz说明文档
*/
public static void addJob(String jobName, Class<? extends Job> cls, String time) {
try {
Scheduler sched = schedulerFactory.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(cls)
.withIdentity(jobName, JOB_GROUP_NAME)
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobName, TRIGGER_GROUP_NAME)
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
sched.scheduleJob(jobDetail, trigger);
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 (带参数)
* @param jobName 任务名
* @param jobClass 任务
* @param time 时间设置,参考quartz说明文档
*/
public static void addJob(String jobName, Class<? extends Job> jobClass, String time, Map<String, Object> parameters) {
try {
Scheduler sched = schedulerFactory.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(jobName, JOB_GROUP_NAME)
.build();
jobDetail.getJobDataMap().put("parameterList", parameters);
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobName, TRIGGER_GROUP_NAME)
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
sched.scheduleJob(jobDetail, trigger);
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**添加一个定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param jobClass 任务
* @param time 时间设置,参考quartz说明文档
*/
public static void addJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName, Class<? extends Job> jobClass,
String time) {
try {
Scheduler sched = schedulerFactory.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(jobName, jobGroupName)
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(triggerName, triggerGroupName)
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
sched.scheduleJob(jobDetail, trigger);
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**添加一个定时任务 (带参数)
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param jobClass 任务
* @param time 时间设置,参考quartz说明文档
*/
public static void addJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName, Class<? extends Job> jobClass,
String time, Map<String, Object> parameters) {
try {
Scheduler sched = schedulerFactory.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(jobName, jobGroupName)
.build();
jobDetail.getJobDataMap().put("parameterList", parameters);
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(triggerName, triggerGroupName)
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
sched.scheduleJob(jobDetail, trigger);
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/** 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
* @param jobName 任务名
* @param time 新的时间设置
*/
public static void modifyJobTime(String jobName, String time) {
try {
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
if (trigger == null) {
return;
}
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
JobKey jobKey = JobKey.jobKey(jobName, JOB_GROUP_NAME);
JobDetail jobDetail = sched.getJobDetail(jobKey);
Class<? extends Job> objJobClass = jobDetail.getJobClass();
removeJob(jobName);
addJob(jobName, objJobClass, time);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**修改一个任务的触发时间
* @param triggerName 任务名称
* @param triggerGroupName 传过来的任务名称
* @param time 更新后的时间规则
*/
public static void modifyJobTime(String triggerName, String triggerGroupName, String time) {
try {
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
if (trigger == null) return;
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(trigger.getCronExpression());
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
trigger = (CronTrigger) trigger.getTriggerBuilder()
.withIdentity(triggerKey)
.withSchedule(scheduleBuilder)
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
sched.rescheduleJob(triggerKey, trigger);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**移除一个任务(使用默认的任务组名,触发器名,触发器组名)
* @param jobName 任务名称
*/
public static void removeJob(String jobName) {
try {
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
JobKey jobKey = JobKey.jobKey(jobName, JOB_GROUP_NAME);
sched.pauseTrigger(triggerKey);
sched.unscheduleJob(triggerKey);
sched.deleteJob(jobKey);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**移除一个任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
*/
public static void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) {
try {
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
sched.pauseTrigger(triggerKey);
sched.unscheduleJob(triggerKey);
sched.deleteJob(jobKey);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 启动所有定时任务
*/
public static void startJobs() {
try {
Scheduler sched = schedulerFactory.getScheduler();
sched.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 关闭所有定时任务
*/
public static void shutdownJobs() {
try {
Scheduler sched = schedulerFactory.getScheduler();
if (!sched.isShutdown()) {
sched.shutdown();
}
} catch (Exception E) {
throw new RuntimeException(E);
}
}
}
任务类:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import java.util.Date;
public class SampleJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) {
//打印当前时间
System.out.println("定时任务执行:" + new Date());
}
}
代码使用:
addJob方法{添加任务}
// 使用默认的任务组名,触发器名,触发器组名
QuartzManager.addJob("jobName", JobClass.class, "0/5 * * * * ?");
addJob方法(带参数)
// 使用默认的任务组名,触发器名,触发器组名
Map<String, Object> parameters = new HashMap<>();
parameters.put("param1", "value1");
QuartzManager.addJob("jobName", JobClass.class, "0/5 * * * * ?", parameters);
addJob方法(指定任务组名、触发器名、触发器组名)
QuartzManager.addJob("jobName", "jobGroupName", "triggerName", "triggerGroupName", JobClass.class, "0/5 * * * * ?");
addJob方法(指定任务组名、触发器名、触发器组名,带参数)
Map<String, Object> parameters = new HashMap<>();
parameters.put("param1", "value1");
QuartzManager.addJob("jobName", "jobGroupName", "triggerName", "triggerGroupName", JobClass.class, "0/5 * * * * ?", parameters);
modifyJobTime方法{修改任务}
QuartzManager.modifyJobTime("jobName", "0/10 * * * * ?");
modifyJobTime方法(指定触发器名、触发器组名)
QuartzManager.modifyJobTime("triggerName", "triggerGroupName", "0/10 * * * * ?");
removeJob方法{删除任务}
QuartzManager.modifyJobTime("triggerName", "triggerGroupName", "0/10 * * * * ?");
removeJob方法(指定任务组名、触发器名、触发器组名)
QuartzManager.removeJob("jobName", "jobGroupName", "triggerName", "triggerGroupName");
startJobs方法{启动所有任务}
QuartzManager.startJobs();
shutdownJobs方法{关闭所有任务}
QuartzManager.shutdownJobs();