我的作业中有一个Step
,它从数据库A读取,然后写入数据库B和C。
如果 select 语句没有产生任何结果,我希望它像往常一样继续processor
和writer
。但是,writer()
不叫!
这是因为我的writer
是一个复合项目编写器,它有一个编写器,可以更新控制表(数据库 C(,说读取器不读取任何结果。
我显然会有一个新的 TaskletStep
来遵循这个有问题的Step
,但这是一个分区步骤。
Job
是否有允许空读取不标记为"NOOP"或类似,而是标记为成功的配置属性?
您应该能够在此用例中使用StepExecutionListener
而不是ItemWriter
。 在该StepExecutionListner#afterStep
中,您可以查看项目读取计数,如果为 0,则执行该数据库更新。 作者是一ItemWriter
,这意味着它打算用来写已经阅读的项目。
创建一个自定义ItemReader
,如果未读取任何项目,则返回 sentinel 项目。
添加映射到在其中更新控制表的 sentinel 项类的自定义ItemWriter
。