Задание Spring Boot cron запускается до загрузки Spring Application, несмотря на использование CommandLineRunner - PullRequest
1 голос
/ 14 октября 2019

Я использую аннотацию 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()

   }

}

1 Ответ

1 голос
/ 14 октября 2019

Вы можете поместить логику initData в bean-компонент initDataBean.

После этого использовать @DependsOn({"initDataBean"}). Это заставляет пружину создавать CronJob после всех необходимых бобов

Взгляните на код:

@Component
@DependsOn({"initDataBean"})
public class CronJob {

    @Scheduled(cron = "0/5 * * * * ?")
    public void doSomething() {
        //access Data here which was initialized in initSomeData()
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...