【问题标题】:Spring Batch: Writer is not being called if Reader reads nothingSpring Batch:如果 Reader 什么也没读,则不会调用 Writer
【发布时间】:2018-06-13 09:45:10
【问题描述】:

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

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

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

我显然会有一个新的 Tasklet Step 来跟踪这个有问题的 Step,但它是一个分区步骤。

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

【问题讨论】:

    标签: spring spring-boot spring-batch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 2017-08-20
        • 2020-08-28
        • 1970-01-01
        相关资源
        最近更新 更多