package org.springblade.timing;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Lazy(value=false)
@Component
@EnableScheduling
@Controller
public class DynamicCronTask implements SchedulingConfigurer {
public static String cron = "0/10 * * * * ?";
@RequestMapping("/setDynamicCronTask")
public String setSpringDynamicCronTask(HttpServletRequest request, String setCron) {
System.out.println("cron setDynamicCronTaskto:" + setCron);
cron = setCron;
System.err.println("cron change to:" + cron);
return "";
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegister) {
taskRegister.addTriggerTask(new Runnable() {
@Override
public void run() {
// 逻辑任务
System.out.println("dynamicCronTask is running..."+taskRegister.getCronTaskList().size());
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 任务触发,可修改任务的执行周期
CronTrigger trigger = new CronTrigger(cron);
System.out.println("cron:" + cron);
Date nextExecutor = trigger.nextExecutionTime(triggerContext);
return nextExecutor;
}
});
}
}
模拟请求:
http://localhost:9998/setDynamicCronTask?setCron=0/1 * * * * ?
运行结果: