Spring Batch - 当 ItemReader 不返回数据时如何使作业失败

Kiv*_*anc 2 spring spring-batch

我有一个 spring 批处理应用程序,它使用 JdbcCursorItemReader 从数据库表读取数据,并使用 FlatFileItemWriter 将其写入平面文件。

当我测试我的应用程序时,我看到即使没有通过 JdbcCursorItemReader 从数据库返回数据,FlatFileItemWriter 也会创建一个文件。但是,当数据库中没有合适的数据时,我打算让我的工作失败。是否可以这样做或至少防止 FlatFileItemWriter 创建文件?

问候

Tre*_*ick 5

来自http://static.springsource.org/spring-batch/reference/html/patterns.html

11.7. 未找到输入时处理步骤完成

在许多批处理场景中,在数据库或文件中找不到要处理的行并不例外。Step 被简单地认为没有找到工作,并以读取 0 个项目完成。Spring Batch 中开箱即用的所有 ItemReader 实现都默认使用这种方法。如果即使存在输入也没有写出任何内容,这可能会导致一些混乱。(如果文件被错误命名等,通常会发生这种情况)出于这个原因,应该检查元数据本身以确定框架发现处理了多少工作。但是,如果发现没有输入被认为是异常的怎么办?在这种情况下,以编程方式检查元数据是否未处理任何项目并导致失败是最好的解决方案。由于这是一个常见用例,因此为侦听器提供了以下功能:

public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport {

public ExitStatus afterStep(StepExecution stepExecution) {
    if (stepExecution.getReadCount() == 0) {
        return ExitStatus.FAILED;
    }
    return null;
}

}
Run Code Online (Sandbox Code Playgroud)