Как управлять всеми весенними пакетными заданиями, выполняемыми как запланированные задания cron, передавая логический флаг для отключения или включения заданий? - PullRequest
3 голосов
/ 25 марта 2020

Я создал таблицу статуса задания, в которой у меня есть логический флаг, основанный на том, что я возвращаю выражение cron (активный cron или hypen (-) cron), и мой планировщик будет работать. Логический флаг будет обновлен, если вы хотите включить или отключить все весенние пакетные задания.

Как мы можем контролировать флаг в приложении, иначе у нас будут проблемы с запуском выражения cron?

@Scheduled(cron = "#{@getCronValueDevice}")
@Scheduled(cron = "#{@getCronValueStorage}")

@Bean
public String getCronValueDevice() {
    JobStatus jobStatus = jobStatusRepository.findByJobName(BatchJobConstants.DEVICE_JOB_NAME);
    if (jobStatus != null && jobStatus.getIsActive()) {
        return jobStatus.getActiveCronExpression();
    } else {
        return "-";
    }

1 Ответ

1 голос
/ 25 марта 2020

Если цель состоит в том, чтобы включить / отключить запланированные задания с помощью флага, я бы оставил это простым и сделал бы код запуска задания обусловленным этим флагом, например:

@Scheduled(cron = "#{your.cron.expression}")
public void runJob() {
   boolean enabled = ... // dynamically load the flag as needed
   if (enabled) {
      // run the job
   }
}

Это не требует изменить выражение cron на лету, чтобы включить / отключить расписание. Если флаг имеет значение false, задание не будет выполнено в последующих расписаниях, пока оно не будет повторно активировано.

Кстати, kubernetes предоставляет функцию, аналогичную приостановить / возобновить задания cron (это может быть сделано на лету путем исправления спецификации задания cron).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...