如何在运行时安排Cron Expression



我想在运行时调度cron。我从数据库中获取我的cron列表,基于我想要调度cron表达式的列表。有人能帮我解决这个问题吗。

package com.app.schedule.schedular; 
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import com.app.schedule.controller.AlertController;
import com.fasterxml.jackson.core.JsonProcessingException;

@Configuration
@EnableScheduling
public class Schedular {

@Autowired AlertController alertController;

@Scheduled(cron = "0 23 17 * * ?")
public void scheduleTaskUsingCronExpression() throws JsonProcessingException, SchedulerException {

alertController.getAlertList();
}

}

在运行时,当您从数据库中获取cron表达式或修改cron表达式时,需要两个步骤来更改cron任务。以下代码仅供参考。

首先调用removeScheduler删除现有调度器使用旧的cron表达式,然后使用addScheduler从数据库中添加使用新cron表达式的新调度器。

public class ScheduleTaskManager {
private Map<TriggerKey, Scheduler> schedulerMap = new ConcurrentHashMap<>();

public void removeScheduler(String triggerName) throws Exception {
Scheduler scheduler = schedulerMap.get(TriggerKey.triggerKey(triggerName));
if (scheduler != null) {
scheduler.shutdown();
schedulerMap.remove(TriggerKey.triggerKey(triggerName));
}
}
public void addScheduler(String triggerName, String cronExpression, JobDetail jobDetail) throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(TriggerKey.triggerKey(triggerName))
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
schedulerMap.put(TriggerKey.triggerKey(triggerName), scheduler);
}
}

最新更新