Spring Batch - сохранить генерируемое сообщение «onSkipInRead» в EXIT_MESSAGE таблицы batch_step_execution - PullRequest
0 голосов
/ 30 января 2019

Я хочу, какие записи были пропущены во время чтения, и вставьте их в «EXIT_MESSAGE» из batch_step_execution.Итак, это мой класс "SkipListener".

public class IntroductionSkipListener {

private static final Logger LOG = Logger.getLogger(IntroductionSkipListener.class);

@OnSkipInRead
public void onSkipInRead(Throwable t) {
    LOG.error("Item was skipped in read due to: " + t.getMessage());
}

@OnSkipInWrite
public void onSkipInWrite(Introduction item, Throwable t) {
    LOG.error("Item " + item + " was skipped in write due to : " + t.getMessage());
}

@OnSkipInProcess
public void onSkipInProcess(Introduction item, Throwable t) {
    LOG.error("Item " + item + " was skipped in process due to: " + t.getMessage());

}

Я хочу, чтобы следующее бросаемое сообщение было сохранено в таблице.

    2019-01-30 15:37:53.339 ERROR 10732 --- [nio-8080-exec-1] c.s.a.b.config.IntroductionSkipListener  : Item was skipped in read due to: Parsing error at line: 2 in resource=[URL [file:E:/survey-data-repo/Web/Source_Code/survey_v0.12/survey-data/1546580364630/1.Introduction.csv]], input=[fa1e9a60603145e3a1ec67d513c594cb,as,1,4,4,New Salmamouth,Chauncey Skyway,53566,27.216799:75.598685,Aglae Rice,580242662,2,12/2/2001 10:01]

И сделайте EXIT_STATUS как "SKIPPED" иличто-то вроде того.Возможно ли это?

PS Я новичок в Spring Batch.

1 Ответ

0 голосов
/ 30 января 2019

Да, вы можете преобразовать параметр Throwable вашего onSkipInRead метода в FlatFileParseException и использовать это исключение, чтобы получить необработанную пропущенную строку и ее номер.

Сейчасчтобы изменить ExitStatus на SKIPPED, необходимо добавить метод обратного вызова после шага (@AfterStep) и установить состояние выхода, если некоторые строки были пропущены, например:

@AfterStep
public ExitStatus checkForSkips(StepExecution stepExecution) {
    if (stepExecution.getSkipCount() > 0) {
        return new ExitStatus("SKIPPED");
    }
    else {
        return null;
    }
}

Вы можете найти пример в SkipCheckingListener .

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