如何定义我的@Scheduled 方法何时应该被第一次调用?

问题描述

我的项目刚开始时第一次调用@Scheduled 方法(它没有完全启动)。我可以定义我的@Scheduled 方法第一次调用的时间(不使用初始延迟)。我想要我所有的@Scheduled 方法在我的服务器启动时第一次开始执行。所以我的启动时间会减少。

我使用了固定延迟调度程序:

 @Scheduled(fixedDelay = 1800000) // runs in every 30min
public void schedulerFunction(){}

解决方法

您可以实现 ApplicationListener 并等待 ContextReadyEvent

@Component
public class YourClassHavingScheduledMethodimplements ApplicationListener<ContextRefreshedEvent> {

    private boolean contextInitialized = false;

    @Scheduled(...)
    public void someScheduledMethod() {
        if(this.contextInitialized) {
            // Execute logic here
        }
    }

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        this.contextInitialized = true;
    }
}