Spring Batch:如果Reader没有读取任何内容,则不会调用Writer

时间:2018-06-13 09:45:11

标签: spring spring-boot spring-batch

我的工作中有一个Step从数据库A中读取,然后写入数据库B&下进行。

如果select语句没有产生任何结果,我希望它像往常一样继续processorwriter。但是,writer()未被调用!

这是因为我的writer是一个复合项目编写器,它有一个更新控制表(数据库C)的编写器,说读者没有读取结果。

我显然会有一个新的Tasklet Step来关注这个Step,但它是一个分区步骤。

是否有Job的配置属性允许空读取不被标记为' NOOP'或类似,但成功?

2 个答案:

答案 0 :(得分:2)

您应该可以使用StepExecutionListener代替ItemWriter这个用例。在StepExecutionListner#afterStep中,您可以查看项目读取计数,如果它是0,则执行该数据库更新。作者片段是ItemWriter,意思是它用于写入已经阅读的项目。

答案 1 :(得分:0)

如果没有读取任何项目,请创建一个返回哨兵项目的自定义ItemReader 添加映射到更新控制表的sentinel项类的自定义ItemWriter