package com.init.webSocket.scheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ContextLifecycleScheduledTaskRegistrar;
import org.springframework.scheduling.config.TriggerTask;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date;
@Component
public class DynamicCronSchedule {
private static Logger logger = LoggerFactory.getLogger(DynamicCronSchedule.class);
private static ContextLifecycleScheduledTaskRegistrar taskRegistrar;
private static String cron = "0 */1 * * * ?";
public DynamicCronSchedule() {
configureTasks();
}
public static void setNewCron(String newCron) {
cron = newCron;
configureTasks();
}
private static void configureTasks() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(3);
scheduler.initialize();
if (taskRegistrar != null) {
taskRegistrar.destroy();
}
taskRegistrar = new ContextLifecycleScheduledTaskRegistrar();
taskRegistrar.setScheduler(scheduler);
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("dynamicCronTask is running..." + cron + new Date());
}
};
Trigger trigger = new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
CronTrigger trigger = new CronTrigger(cron);
Date nextExec = trigger.nextExecutionTime(triggerContext);
return nextExec;
}
};
TriggerTask triggerTask = new TriggerTask(runnable, trigger);
taskRegistrar.setTriggerTasksList(Arrays.asList(triggerTask));
taskRegistrar.afterSingletonsInstantiated();
}
}
public HttpResult settingSettlement(String settlementDateTime, HttpServletRequest request,
HttpServletResponse response) throws ParseException {
DynamicCronSchedule.setNewCron("*/5 * * * * ?");
}