弹簧调度具有固定延迟和初始延迟的作业

时间:2017-07-04 13:34:33

标签: spring spring-boot scheduled-tasks

我正在尝试安排方法调用。我希望在服务器启动后立即调度此方法调用,然后每隔30秒调度一次。

代码如下:

@Configuration
@EnableScheduling
@EnableTransactionManagement
public class Schedular implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.setScheduler(poolScheduler());

        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                testScheduling();
            }
        }, new Trigger() {

            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                Calendar nextExecutionTime = Calendar.getInstance();
                nextExecutionTime.add(Calendar.SECOND, <some value from database>);
                return nextExecutionTime.getTime();
            }
        });
    }

    @Bean
    public TaskScheduler poolScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("poolScheduler");
        scheduler.setPoolSize(10);
        return scheduler;
    }

    public void testScheduling(){
        System.out.println("Scheduling Testing");
    }
}

下面的代码在服务器启动30秒后安排方法代码但不仅仅是在服务器启动之后。我知道我需要做一些其他配置来在服务器启动之后安排方法调用,然后在每30秒之后(或者我想要的任何时间)安排方法调用。

我正在使用春季靴子。任何人都可以建议。

此外,是否可以从数据库中获取initial和fixeddelay / fixedrate值。我想从数据库中设置初始值

提前致谢。

2 个答案:

答案 0 :(得分:0)

让我知道这是否适合您

@PostConstruct
@Scheduled(fixedDelay=30000)
public void testScheduling(){
     System.out.println("Scheduling Testing");
}

使用@PostConstuct批注在应用程序启动后启动该方法。

答案 1 :(得分:0)

您可以像下面那样使用。我曾经使用过Spring Boot v2.2.7

@Scheduled(fixedRateString = "${echo.interval(milliseconds)}", initialDelayString = "${echo.initialDelay(milliseconds)}")

应在“ application.properties ”文件中提及这些属性,以供Spring Boot检测并将固定速率和初始延迟的值注入调度程序中。

相关问题