Spring-Batch: как вернуть пользовательский код завершения задания из StepListener - PullRequest
2 голосов
/ 24 октября 2011

Проблема заключается в следующем: у меня есть задание Spring Batch с одним шагом.Этот шаг вызывается несколько раз.Если каждый раз, когда он вызывается, все работает нормально (без исключений), статус задания «ЗАВЕРШЕН».Если что-то плохое случается хотя бы в одном из исполнений Step (исключение выдается), я настроил StepListener, который изменяет код выхода на FAILED:

public class SkipCheckingListener extends StepExecutionListenerSupport {

    public ExitStatus afterStep(StepExecution stepExecution) {
        String exitCode = stepExecution.getExitStatus().getExitCode();
        if (stepExecution.getProcessorSkipCount() > 0) {
            return new ExitStatus(ExitStatus.FAILED);
        }
        else {
            return null;
        }
    }

}

Это нормально работает, когда условиевыполняется блок "if", и задание завершается со статусом FAILED.Однако обратите внимание, что код возврата, который я здесь возвращаю, по-прежнему является одним из стандартных, которые поставляются с Spring Batch.Я хотел бы вернуть свой персонализированный код выхода, такой как «ЗАВЕРШЕНО С ПРОХОДАМИ» в определенные моменты.Теперь я попытался обновить приведенный выше код, чтобы он возвращал только:

public class SkipCheckingListener extends StepExecutionListenerSupport {

    public ExitStatus afterStep(StepExecution stepExecution) {
        String exitCode = stepExecution.getExitStatus().getExitCode();
        if (stepExecution.getProcessorSkipCount() > 0) {
            return new ExitStatus("COMPLETED WITH SKIPS");
        }
        else {
            return null;
        }
    }

}

, как описано в документации: http://static.springsource.org/spring-batch/reference/html/configureStep.html (5.3.2.1. Состояние партии в сравнении с состоянием выхода).Я даже пытался

stepExecution.getJobExecution().setExitStatus("COMPLETED WITH SKIPS");

И, конечно же, выполнение прибывает в блок "if", выполняет код, и все же моя работа заканчивается с кодом завершения COMPLETED, полностью игнорируя код завершения, который ячерез слушателя.

Более подробно об этом нет в их документах, и я ничего не нашел с помощью Google.Может кто-нибудь, пожалуйста, скажите мне, как мне изменить код выхода из Job таким образом?Thanx

1 Ответ

7 голосов
/ 24 октября 2011

похоже, что вы просто не можете изменить BatchStatus , но вы можете попробовать его с exitstatus

этого кода с JobListener у меня работает

// JobListener with interface or annotation
public void afterJob(JobExecution jobExecution) {
    jobExecution.setExitStatus(new ExitStatus("foo", "fooBar"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...