Spring批处理:如果读取器不读取任何内容,则不会调用Writer
我的工作中有一个Spring批处理:如果读取器不读取任何内容,则不会调用Writer,spring,spring-boot,spring-batch,Spring,Spring Boot,Spring Batch,我的工作中有一个步骤,从数据库a读取数据,然后写入数据库B&C 如果select语句不产生任何结果,我希望它像往常一样继续运行到处理器和编写器。但是,不会调用writer() 这是因为mywriter是一个复合项编写器,它有一个编写器更新一个控制表(数据库C),表示读卡器没有读取结果 我显然会有一个新的TaskletStep来遵循这个Step,但这是一个分区步骤 是否有作业的配置属性允许空读取不标记为“NOOP”或类似,而是标记为成功?创建一个自定义ItemReader,如果未读取任何项,则返回
步骤
,从数据库a读取数据,然后写入数据库B&C
如果select语句不产生任何结果,我希望它像往常一样继续运行到处理器和编写器。但是,不会调用writer()
这是因为mywriter
是一个复合项编写器,它有一个编写器更新一个控制表(数据库C),表示读卡器没有读取结果
我显然会有一个新的TaskletStep
来遵循这个Step
,但这是一个分区步骤
是否有作业的配置属性
允许空读取不标记为“NOOP”或类似,而是标记为成功?创建一个自定义ItemReader
,如果未读取任何项,则返回一个哨兵项。
添加一个自定义ItemWriter
映射到sentinel item类,在该类中更新控制表。创建一个自定义ItemReader
,如果未读取任何项目,该类将返回sentinel项目。
添加一个定制的ItemWriter
映射到sentinel item类,您可以在该类中更新控制表。您应该能够为此用例使用StepExecutionListener
,而不是ItemWriter
。在该StepExecutionListner#afterStep
中,您可以查看项目读取计数,如果为0,则执行数据库更新。编写器是一个ItemWriter
,这意味着它将用于编写已读的项目。对于此用例,您应该能够使用StepExecutionListener
而不是ItemWriter
。在该StepExecutionListner#afterStep
中,您可以查看项目读取计数,如果为0,则执行数据库更新。编写器是一个ItemWriter
,这意味着它将用于编写已读取的项目