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);
- });
- }
- }