java - 如何在 Spring Boot 中安排延迟增加的任务?

标签 java spring-boot scheduler spring-scheduled

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

最佳答案

您可以将 SchedulingConfigurer 与自定义触发器结合使用:

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

}

关于java - 如何在 Spring Boot 中安排延迟增加的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744069/

相关文章:

java - 从 HashMap 中查找具有可变数量属性(一个或多个)的对象

linux - 如何计算内核中的活跃用户数

java - 具有 Spring 安全功能的 Spring Boot : Error creating bean with name 'securityFilterChainRegistration'

java - Spring Boot - Time.schedule 的替代方案?

linux - 如何使用 Linux 调度程序将 CPU 核心限制为仅 2 个应用程序?

java - 使用Java线程作为任务调度器,

java - php 页面中的 JSON 值未显示

java - 什么是 NullPointerException,我该如何解决?

java - 使用参数化方法进行 JUnit 测试

java - Autowiring 适用于从 PerConnectionWebSocketHandler 实例化的类吗?