所以我有一个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?
答案 0 :(得分:4)
在面向块的tasklet中,所有内容都以块的形式处理,而不是所有项目。当读者没有阅读任何内容时跳过,您必须知道事实上没有任何项目;遇到空的数据块是不够的,因为之前可能有另一个数据块。
一个简单的方法是,如果没有读取任何内容,只需让步骤继续。在这种情况下,作者将无需写。假设您使用FlatFileItemWriter
来编写文件,您可以将其配置为不留下空文件。这是通过shouldDeleteIfEmpty
属性完成的:
标记表示如果在关闭时没有写入任何行(页眉和页脚除外),则应删除目标文件。默认为
false
。
因此,您只需要将编写器的属性设置为true
即可。如果没有写入,它将删除空文件。