Quartz 是一個(gè) Java 庫(kù),用于在應(yīng)用程序中執(zhí)行定時(shí)任務(wù)。要實(shí)現(xiàn) Quartz 表達(dá)式的動(dòng)態(tài)調(diào)度,你需要遵循以下步驟:
在你的項(xiàng)目中添加 Quartz 庫(kù)的依賴項(xiàng)。如果你使用 Maven,可以在 pom.xml
文件中添加以下依賴項(xiàng):
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
創(chuàng)建一個(gè)實(shí)現(xiàn) org.quartz.Job
接口的類。這個(gè)類將包含要執(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("Hello, Quartz!");
}
}
創(chuàng)建一個(gè) org.quartz.Scheduler
實(shí)例,并配置相關(guān)參數(shù)。例如:
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzScheduler {
private static Scheduler scheduler;
public static void init() throws Exception {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();
}
public static void main(String[] args) throws Exception {
init();
}
}
在需要?jiǎng)討B(tài)調(diào)度任務(wù)的地方,使用 scheduler.scheduleJob()
方法來(lái)調(diào)度任務(wù)。例如:
import org.quartz.*;
public class DynamicScheduler {
public static void scheduleJob(String cronExpression) throws Exception {
// 創(chuàng)建 JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity("myJob", "group1")
.build();
// 創(chuàng)建 Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();
// 調(diào)度任務(wù)
QuartzScheduler.scheduler.scheduleJob(jobDetail, trigger);
}
public static void main(String[] args) throws Exception {
QuartzScheduler.init();
String cronExpression = "0/5 * * * * ?"; // 每 5 秒執(zhí)行一次
scheduleJob(cronExpression);
}
}
在這個(gè)例子中,我們創(chuàng)建了一個(gè)名為 DynamicScheduler
的類,其中包含一個(gè) scheduleJob()
方法。這個(gè)方法接受一個(gè) cron 表達(dá)式作為參數(shù),并使用該表達(dá)式創(chuàng)建一個(gè)新的 Trigger。然后,我們使用 scheduler.scheduleJob()
方法將任務(wù)添加到調(diào)度器中。
現(xiàn)在,你可以根據(jù)需要?jiǎng)討B(tài)地調(diào)度任務(wù),只需傳入不同的 cron 表達(dá)式即可。