如果Item Reader没有返回任何内容,如何在Spring Batch块中跳过Item Writer?

时间:2016-01-08 18:40:28

标签: java spring spring-batch

所以我有一个Spring Batch Project有一个重复的步骤。

<batch:job id="fooJob">
    <batch:step id="barStep">
        <batch:tasklet>
            <batch:chunk reader="myReader" writer="myWriter"
                commit-interval="5">
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
</batch:job>

读者是JdbcCursorItemReader,它还有一个RowMapper,用于将从数据库中检索到的信息存储到POJO中。然后"myWriter"将POJO中设置的字段写入文本文件。这种情况经常发生(由cron决定)。

当数据库为空且读者无法读取任何内容时,如何设置条件以完全跳过itemWriter?

1 个答案:

答案 0 :(得分:4)

在面向块的tasklet中,所有内容都以块的形式处理,而不是所有项目。当读者没有阅读任何内容时跳过,您必须知道事实上没有任何项目;遇到空的数据块是不够的,因为之前可能有另一个数据块。

一个简单的方法是,如果没有读取任何内容,只需让步骤继续。在这种情况下,作者将无需写。假设您使用FlatFileItemWriter来编写文件,您可以将其配置为不留下空文件。这是通过shouldDeleteIfEmpty属性完成的:

  

标记表示如果在关闭时没有写入任何行(页眉和页脚除外),则应删除目标文件。默认为false

因此,您只需要将编写器的属性设置为true即可。如果没有写入,它将删除空文件。