Я использую аннотацию Spring Boot @Scheduled для планирования задания cron, которое запускается каждые 5 секунд. Предполагается, что метод задания cron обращается к некоторым данным, которые инициализируются при загрузке приложения Spring. Однако задание запускается до завершения SpringApplication.run (). Как убедиться, что задание cron запускается только после загрузки Spring Application? Использование Thread.sleep () определенно не является хорошим решением IMO. Ниже приведен фрагмент кода.
MyWebApplication.java
@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages="CronJobPackage")
public class MyWebApplication implements CommandLineRunner, Runnable {
public static void main(String[] args) {
System.out.println("Starting MyWebApplication");
SpringApplication.run(MyWebApplication.class).getEnvironment().getSystemProperties();
System.out.println("Returned from MyWebApplication.run");
}
@Override
public void run(String... args) throws Exception {
initSomeData();
}
}
/********** CronJob.java **********************
@Component
public class CronJob{
@Scheduled(cron = "0/5 * * * * ?")
public void doSomething() {
//access Data here which was initialized in initSomeData()
}
}