Spring boot 春季批量-保存“;onSkipInRead“;批处理步骤执行表的退出消息中的可丢弃消息

Spring boot 春季批量-保存“;onSkipInRead“;批处理步骤执行表的退出消息中的可丢弃消息,spring-boot,spring-batch,Spring Boot,Spring Batch,我想知道在读取过程中跳过了哪些记录,并将其插入批处理步骤执行的“退出消息”中。这是我的“SkipListener”课程 我希望将以下可丢弃的消息保存在表中 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 resour

我想知道在读取过程中跳过了哪些记录,并将其插入批处理步骤执行的“退出消息”中。这是我的“SkipListener”课程

我希望将以下可丢弃的消息保存在表中

    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]
并将退出状态设置为“跳过”或类似的内容。可能吗


p.S.我是Spring Batch的新手。

是的,您可以将
onSkipInRead
方法的
Throwable
参数强制转换为,并使用该异常获取跳过的原始行及其编号

现在,为了将退出状态更改为跳过,您需要在步骤(
@AfterStep
)后添加回调方法,并在跳过某些行时设置退出状态,例如:

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

您可以在中找到一个示例。

感谢您的回复。上述方法有效。尽管是个问题;我想将跳过的行和跳过的行号保存在其他一些表(自定义)或退出消息列的批处理步骤执行表中。在表中保存异常是一种很好的方法<代码>感谢您的回复。上述方法有效。在这种情况下,请输入答案。对于第二个问题,可以(请参见),您可以将它们保存到表中。这比将它们添加到退出消息要好,因为退出消息的最大长度可能会超过。
@AfterStep
public ExitStatus checkForSkips(StepExecution stepExecution) {
    if (stepExecution.getSkipCount() > 0) {
        return new ExitStatus("SKIPPED");
    }
    else {
        return null;
    }
}