简介:
SchedulingConfigurer 是 Spring 框架中的一个接口,用于配置任务调度(scheduling)的相关设置。在 Spring 中,任务调度通常通过 Spring 的任务调度模块(Task Scheduling)来实现,其中就涉及到一些配置和定制的需求。SchedulingConfigurer 接口提供了一种灵活的方式来定制任务调度的行为。
该接口定义了一个方法:
这是一个函数式接口,通过实现这个接口,你可以在应用程序启动时配置任务调度的行为。你可以使用这个接口来添加、修改或删除任务,也可以配置任务执行的线程池等相关设置。通常,ScheduledTaskRegistrar 对象是通过 Spring 容器自动注入的,你可以在 configureTasks 方法中对其进行配置。
举例:
@Configuration
@EnableScheduling
public class MySchedulingConfigurer implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addFixedRateTask(() -> {
// 定时任务的具体逻辑
System.out.println("Scheduled task executed!");
}, 1000); // 设置定时任务执行的间隔为1000毫秒
}
}
这个方法中,ScheduledTaskRegistrar 是 Spring 框架中用于注册和管理定时任务的一个类,它提供了一些方法用于配置任务调度的行为,以下是其中几个方法的简要说明:
动态定时任务(高级用法):
如何动态的设置调度时间呢?参考下面的例子:
@EnableScheduling
@Component
public class FDWSchedulingConfigurer implements SchedulingConfigurer {
@Override
public 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);
});
}
}