如何在 spring 启动时以增加的延迟安排任务?

How to schedule a task in spring boot with increasing delay?

我需要安排一个任务,该任务将在 10 分钟后首先执行,然后是 100 分钟,然后是 1000 分钟,依此类推(基本上是指数 10^n)。 我发现 @Scheduled 只接受常量作为参数。 如何实现延迟增量?

您可以将 SchedulingConfigurer 与自定义 Trigger 一起使用:

@Configuration
@EnableScheduling
public class Schedule implements SchedulingConfigurer {

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    taskRegistrar.setScheduler(taskScheduler());
    taskRegistrar.addTriggerTask(
            myTask(), new ExponentialTrigger()
    );
}

static class ExponentialTrigger implements Trigger {

    long n = 0;

    @Override
    public Date nextExecutionTime(TriggerContext triggerContext) {
        // delay from last scheduled time or completion time? pick yours 
        Date lastDate = triggerContext.lastScheduledExecutionTime(); 
        long last;
        if (lastDate == null) {
            last = System.currentTimeMillis();
        } else {
            last = lastDate.getTime();
        }

        return new Date(last + ((int) Math.pow(10, n++)) * 60_000); // * 60_000 millis to minutes
    }
}


@Bean(destroyMethod = "shutdown")
public ExecutorService taskScheduler() {
    return Executors.newScheduledThreadPool(42); // if you have single task, which is faster than delay then this can be 1
}

@Bean
public Runnable myTask() {
    return new Runnable() {
        @Override
        public void run() {
            System.out.println(System.currentTimeMillis());
        }
    };
}

}