Spring batch: как динамически изменить фиксированную задержку задания во время выполнения - PullRequest
0 голосов
/ 12 июня 2018

Мое требование:

У меня есть пакетное задание с фиксированной задержкой 5 сек.Таким образом, моя работа будет опрашивать веб-сервис каждые 5 секунд, и в зависимости от ответа (в случае, когда я получаю 200 нормальный статус), мне нужно перевести текущее задание в спать на 30 секунд , и после этого оно должновозобновлять опросы веб-службы каждые 5 секунд

Есть ли способ настроить это динамически во время выполнения ??Мне нужно изменить свойство фиксированной задержки в Читатель .

Мой пример конфигурации TestJob:

@Scheduled(fixedDelay = 5000L) // I need to change this property dynamically @ runtime 
    public void TestEventScheduler() {
        JobParameters jobParameters = new JobParametersBuilder().addLong("TestDataJobTime", System.currentTimeMillis()) 
                .toJobParameters();
        try {
            jobLauncher.run(TestDataJob, jobParameters);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

1 Ответ

0 голосов
/ 12 июня 2018

Есть много подходов, которые вы можете сделать здесь:

  1. Зарегистрируйте Trigger боб и обновляйте его каждый раз с вашей задержкой.Вы также можете заглянуть в CompoundTrigger , чтобы упростить свою логику.

  2. Вместо использования аннотации @Scheduled в конце вашего пакетного задания вы можете иметь прослушиватель или выводканал, который добавит ваш batchJob еще раз к каналу выполнения с определенной задержкой.

Также вы можете проверить ответ аналогичной проблемы: Планирование работы с помощью Spring программно (с динамически установленным fixedRate)

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