问题描述
我的项目刚开始时第一次调用@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;
}
}