Остановка заданий SpringBatch, запущенных из командной строки - PullRequest
1 голос
/ 18 октября 2011

Задания Spring Batch можно запустить из командной строки, сказав JVM запустить CommandLineJobRunner. Согласно JavaDoc , выполнение той же команды с добавленным параметром -stop остановит задание:

Аргументы этого класса могут быть предоставлены в командной строке (через пробел) или через stdin (через новую строку). Oни являются следующими:

jobPath jobIdentifier (jobParameters) * Параметры командной строки: следует

  • jobPath: контекст приложения xml, содержащий задание
  • -restart: (необязательно) для перезапуска последнего неудачного выполнения
  • -stop: (необязательно), чтобы остановить текущее выполнение
  • -abandon: (необязательно) отменить остановленное выполнение
  • -next: (необязательно) для запуска следующего в последовательности в соответствии с JobParametersIncrementer в Job jobIdentifier: имя задания или идентификатор выполнения задания (для -stop, -abandon или -restart).
  • jobParameters: от 0 до многих параметров, которые будут использоваться для запуска задания, указанного в виде пар ключ = значение.

Однако в JavaDoc для метода main () параметр -stop не указан. Просматривая код на docjar.com, я не вижу возможности использовать параметр -stop там, где я ожидаю.

Я подозреваю, что можно остановить пакет, запущенный из командной строки, но только в том случае, если выполняемые пакеты поддерживаются без переходных процессов jobRepository? Если в командной строке запускается пакет, в котором хранятся только данные в HSQL (т. Е. В памяти), невозможно остановить задание, кроме CTRL-C и т. Д.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Переключатель stop будет работать, но он остановит работу только после завершения текущего выполняемого шага.Это не убьет работу сразу.

1 голос
/ 18 октября 2011

команда останова реализована, см. источник для CommandLineJobRunner , строка 300 +

        if (opts.contains("-stop")) {
            List<JobExecution> jobExecutions = getRunningJobExecutions(jobIdentifier);
            if (jobExecutions == null) {
                throw new JobExecutionNotRunningException("No running execution found for job=" + jobIdentifier);
            }
            for (JobExecution jobExecution : jobExecutions) {
                jobExecution.setStatus(BatchStatus.STOPPING);
                jobRepository.update(jobExecution);
            }
            return exitCodeMapper.intValue(ExitStatus.COMPLETED.getExitCode());
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...