У меня есть приложение, которое должно что-то делать при запуске приложения, и только после того, как задача запуска завершена, я хочу выполнить задачу, определенную в функции, помеченной @Scheduled.
Текущая проблема заключается в том, что задача, определенная в @Scheduled, выполняется раньше, чем та, которая запускается при запуске.
Я добился желаемого эффекта, вставив:
Thread.sleep(100);
Однако я считаю, что это в лучшем случае наивное решение, и мне интересно, есть ли элегантное решение этой проблемы.
AppStartup.java:
@Component
public class AppStartup implements ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
System.out.println("On startup");
}
}
DataCollector.java:
@Configuration
@EnableScheduling
public class DataCollector {
@Scheduled(fixedRate = 5000)
public void executeTask() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
// do sth
}