引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
代码实现
package net.evecom.iaplatform.backup.schedule;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
public class DynamicQuartzOperations {
private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(DynamicQuartzOperations.class);
public static void addJob(String jobName, String jobGroup, String triggerName,
String triggerGroup, String cronExpression, Class<? extends Job> jobClass) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
JobDetail job = JobBuilder.newJob(jobClass)
.withIdentity(jobName, jobGroup)
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(triggerName, triggerGroup)
.startNow()
.withSchedule(CronScheduleBuilder
.cronSchedule(cronExpression))
.build();
scheduler.scheduleJob(job, trigger);
LOG.info("Job added successfully.");
} catch (SchedulerException e) {
LOG.error("Error adding job: " + e.getMessage());
}
}
public static void modifyCronTrigger(String triggerName, String triggerGroup, String newCronExpression) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
Trigger trigger = scheduler.getTrigger(triggerKey);
if (trigger instanceof CronTrigger) {
CronTrigger cronTrigger = (CronTrigger) trigger;
scheduler.pauseTrigger(triggerKey);
CronTrigger newCronTrigger = cronTrigger.getTriggerBuilder()
.withIdentity(triggerName, triggerGroup)
.withSchedule(CronScheduleBuilder.cronSchedule(newCronExpression))
.build();
scheduler.rescheduleJob(triggerKey, newCronTrigger);
LOG.info("Cron trigger modified successfully.");
} else if (trigger != null) {
LOG.info("Trigger with name '{}' and group '{}' is not a CronTrigger.", triggerName, triggerGroup);
} else {
LOG.info("Trigger not found.");
}
} catch (SchedulerException e) {
LOG.error("Error modifying cron trigger: " + e.getMessage(), e);
}
}
public static void deleteJob(String jobName, String jobGroup) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
if (scheduler.checkExists(jobKey)) {
scheduler.deleteJob(jobKey);
LOG.info("Job deleted successfully.");
} else {
LOG.info("Job does not exist.");
}
} catch (SchedulerException e) {
LOG.error("Error deleting job: " + e.getMessage());
}
}
public static void resumeJob(String jobName, String jobGroup) {
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
if (scheduler.checkExists(jobKey)) {
scheduler.resumeJob(jobKey);
LOG.info("Job resumed successfully: {}", jobKey);
} else {
LOG.info("Job does not exist: {}", jobKey);
}
} catch (SchedulerException e) {
LOG.error("Error resuming job: {}", jobKey, e);
}
}
public static void pauseJob(String jobName, String jobGroup) {
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
if (scheduler.checkExists(jobKey)) {
scheduler.pauseJob(jobKey);
LOG.info("Job paused successfully: {}", jobKey);
} else {
LOG.info("Job does not exist: {}", jobKey);
}
} catch (SchedulerException e) {
LOG.error("Error pausing job: {}", jobKey, e);
}
}
public static boolean isExists(String jobName, String jobGroup) {
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
if (scheduler.checkExists(jobKey)) {
return true;
}
} catch (SchedulerException e) {
LOG.error("Error job: {}", jobKey, e);
}
return false;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了