简介:
SchedulingConfigurer 是 Spring 框架中的一个接口,用于配置任务调度(scheduling)的相关设置。在 Spring 中,任务调度通常通过 Spring 的任务调度模块(Task Scheduling)来实现,其中就涉及到一些配置和定制的需求。SchedulingConfigurer 接口提供了一种灵活的方式来定制任务调度的行为。
该接口定义了一个方法:
这是一个函数式接口,通过实现这个接口,你可以在应用程序启动时配置任务调度的行为。你可以使用这个接口来添加、修改或删除任务,也可以配置任务执行的线程池等相关设置。通常,ScheduledTaskRegistrar 对象是通过 Spring 容器自动注入的,你可以在 configureTasks 方法中对其进行配置。
举例:
@Configuration
@EnableScheduling
public class MySchedulingConfigurer implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addFixedRateTask(() -> {// 定时任务的具体逻辑System.out.println("Scheduled task executed!");}, 1000); // 设置定时任务执行的间隔为1000毫秒}
}
这个方法中,ScheduledTaskRegistrar 是 Spring 框架中用于注册和管理定时任务的一个类,它提供了一些方法用于配置任务调度的行为,以下是其中几个方法的简要说明:
动态定时任务(高级用法):
如何动态的设置调度时间呢?参考下面的例子:
@EnableScheduling
@Component
public class FDWSchedulingConfigurer implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {//添加动态定时任务和触发器taskRegistrar.addTriggerTask(()->{Random random = new Random();int a = random.nextInt(5);System.out.println("随机数为:"+a);try {Thread.sleep(a*1000L);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Scheduled task executed!"+new Date());},triggerContext -> {//每秒种执行一次String cron = "* * * * * ? ";//上一次的任务执行完成后,下一次执行开始的时间才会计算出来return new CronTrigger(cron).nextExecutionTime(triggerContext);});}
}