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



我的作业中有一个Step,它从数据库A读取,然后写入数据库B和C。

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

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

我显然会有一个新的 TaskletStep来遵循这个有问题的Step,但这是一个分区步骤。

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

您应该能够在此用例中使用StepExecutionListener而不是ItemWriter。 在该StepExecutionListner#afterStep中,您可以查看项目读取计数,如果为 0,则执行该数据库更新。 作者是一ItemWriter,这意味着它打算用来写已经阅读的项目。

创建一个自定义ItemReader,如果未读取任何项目,则返回 sentinel 项目。
添加映射到在其中更新控制表的 sentinel 项类的自定义ItemWriter

最新更新