Весеннее расписание - PullRequest
0 голосов
/ 06 мая 2020

У меня есть выражение cron, которое будет запускаться каждый день в 19:00.
Я использую последнюю версию Spring boot.

      @Scheduled(cron = "${my.cron.expression}")
        public void scheduleTask(){
          //call service layer where business logic resides
          //other autowired beans here

}

У меня 2 сомнения.

Q1) Как Могу ли я убедиться, что CRON JOB выполняется, только если старый экземпляр завершил работу.

Q2) Как перезагружать / обновлять sh контекст приложения и перезагружать все bean-компоненты заново sh для каждого вызова CRON JOB?

Ответы [ 3 ]

0 голосов
/ 06 мая 2020

Свойство fixedDelay обеспечивает задержку в n миллисекунд между временем завершения sh выполнения задачи и временем начала следующего выполнения задачи.

@Schedules({ 
  @Scheduled(fixedDelay = 1000), 
  @Scheduled(cron = "${my.cron.expression}")
})
0 голосов
/ 07 мая 2020

Для вашего Q1: предложите вам иметь логическую переменную уровня класса, например isRunning, как показано ниже

 public class scheduler {
    private boolean isRunning = false;

    @Scheduled(cron = "${my.cron.expression}")
    public void scheduleTask(){
       if(!isRunning) {
          isRunning = true;
          // executions goes here
       }
       isRunning = false;
   }
}

Q2: для перезагрузки beans

public class scheduler {
    private boolean isRunning = false;

    @Scheduled(cron = "${my.cron.expression}")
    public void scheduleTask(){
       if(!isRunning) {
          isRunning = true;
          // executions goes here
       }
       isRunning = false;
       DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) 
       context.getBeanFactory();
       registry.destroySingleton({yourbean}) //destroys the bean object
       registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
   }
}
0 голосов
/ 06 мая 2020

Для второго пункта взгляните на spring-cloud-config и клиентскую библиотеку spring-cloud-config-client. Существует конечная точка HTTP для обновления sh beans

Мне нужно создать хранилище для любой подобной распределенной операции, например, очереди сообщений, базы данных.

...