参考:https://www.quartz-scheduler.org/documentation/quartz-2.3.0/
https://www.quartz-scheduler.org/documentation/quartz-2.3.0/examples/
引用的jar如下(spring boot2.4)
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
</dependency>
创建一个管理器class,定义新增、修改、删除、启动、关闭等操作,实际工作中,根据需要,可以动态对定时任务进行管理
/**
* 新增任务
*
* @param jobName 任务名称
* @param jobGroupName 任务组
* @param triggerName 触发器
* @param triggerGroupName 触发器组
* @param jobClass 需要执行的任务类型
* @param cron 时间计划
*/
public static void addjob(String jobName, String jobGroupName, String triggerName,String triggerGroupName, Class jobClass, String cron){
try {
// 任务管理器实例化
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// job对象
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
// 任务触发器
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
// 定时器、计划
CronTrigger cronTrigger = (CronTrigger)triggerBuilder.build();
scheduler.scheduleJob(jobDetail, cronTrigger);
if(!scheduler.isShutdown()){
// 启动
scheduler.start();
}
} catch (SchedulerException e) {
log.error("定时任务添加异常" + e.getMessage());
e.printStackTrace();
}
}
/**
* 修改任务
*
* @param triggerName 触发器
* @param triggerGroupName 触发器组
* @param cron 时间计划
*/
public static void modifyJobTime(String triggerName,String triggerGroupName, String cron){
try {
// 任务管理器实例化
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger trigger = (CronTrigger)scheduler.getTrigger(triggerKey);
if(trigger == null){
return;
}
// 旧时间计划
String oldTime = trigger.getCronExpression();
if(!oldTime.equalsIgnoreCase(cron)){
// 修改时间计划
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
triggerBuilder.withIdentity(triggerName, triggerGroupName);
// 立即生效
triggerBuilder.startNow();
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
trigger = (CronTrigger) triggerBuilder.build();
// 更新时间计划
scheduler.rescheduleJob(triggerKey, trigger);
}
} catch (SchedulerException e) {
log.error("定时任务修改异常" + e.getMessage());
e.printStackTrace();
}
}
/**
* 删除任务
*
* @param jobName 任务名称
* @param jobGroupName 任务组
* @param triggerName 触发器
* @param triggerGroupName 触发器组
*/
public static void removeJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName){
try {
// 任务管理器实例化
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 触发器
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
// 删除任务
scheduler.deleteJob(JobKey.jobKey(jobName,jobGroupName));
} catch (SchedulerException e) {
log.error("定时任务删除异常" + e.getMessage());
e.printStackTrace();
}
}
/**
* 启动所有定时任务
*/
public static void startJobs(){
try {
// 任务管理器实例化
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 启动
scheduler.start();
} catch (SchedulerException e) {
log.error("定时任务启动异常" + e.getMessage());
e.printStackTrace();
}
}
/**
* 关闭所有的定时任务
*/
public static void shutDownAllJobs(){
try {
// 任务管理器实例化
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 关闭
scheduler.shutdown();
} catch (SchedulerException e) {
log.error("定时任务关闭异常" + e.getMessage());
e.printStackTrace();
}
}
创建Quartz执行的job:
public class DemoJob implements Job {
private final Log log = LogFactory.getLog(DemoJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("定时任务。。。");
}
}
添加job到Quartz
QuartzManage.addjob("testJob1", "testJobGroup", "testTrigger1", "testTriggerGroup", DemoJob.class, "*/5 * * * * ?");