动态修改springboot中的scheduling(动态修改定时任务执行时间)

2023年2月2日11:58:23
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 * * * * ? 

运行结果:

  • 作者:N_A_S_A
  • 原文链接:https://blog.csdn.net/blueheartsbr/article/details/119216177
    更新时间:2023年2月2日11:58:23 ,共 1596 字。