在Java中,使用Quartz框架可以實(shí)現(xiàn)任務(wù)的動(dòng)態(tài)添加和刪除。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用Quartz實(shí)現(xiàn)任務(wù)的動(dòng)態(tài)添加和刪除:
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
org.quartz.Job
接口的類,這將是你要執(zhí)行的任務(wù):import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Job is executing...");
}
}
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzManager {
private static Scheduler scheduler;
static {
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void addJob(String jobName, String cronExpression) {
try {
// 創(chuàng)建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity(jobName)
.build();
// 創(chuàng)建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobName + "_trigger")
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();
// 將JobDetail和Trigger添加到調(diào)度器
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void deleteJob(String jobName) {
try {
// 刪除Job
scheduler.deleteJob(new JobKey(jobName));
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
QuartzManager
類添加和刪除任務(wù):public class Main {
public static void main(String[] args) throws InterruptedException {
// 添加任務(wù)
QuartzManager.addJob("job1", "0/5 * * * * ?"); // 每5秒執(zhí)行一次
Thread.sleep(20000); // 等待20秒
// 刪除任務(wù)
QuartzManager.deleteJob("job1");
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)名為MyJob
的任務(wù)類,并在QuartzManager
類中定義了addJob
和deleteJob
方法。addJob
方法接受一個(gè)任務(wù)名稱和一個(gè)Cron表達(dá)式作為參數(shù),用于定義任務(wù)的執(zhí)行計(jì)劃。deleteJob
方法接受一個(gè)任務(wù)名稱作為參數(shù),用于刪除指定的任務(wù)。
在Main
類中,我們添加了一個(gè)名為job1
的任務(wù),該任務(wù)每5秒執(zhí)行一次。然后我們等待20秒,再刪除該任務(wù)。