【问题标题】:Update file after FlatFileItemReader in Spring Batch在 Spring Batch 中的 FlatFileItemReader 之后更新文件
【发布时间】:2017-12-05 15:35:48
【问题描述】:

我目前在 Spring Batch 作业中有以下处理:

  • FlatFileItemReader 读取 CSV 文件
  • 处理器做了一些工作
  • FlatFileItemWriter 创建读取文件的镜像,但更新文件以反映处理

我不想写入新文件,但我想更新处理期间正在读取的同一文件。

我的问题是,Spring 中是否有一种典型的方法来使用 FlatFileItemReader,然后在运行时更新处理器中每行的同一个文件?

感谢您的帮助。

【问题讨论】:

    标签: java spring spring-batch flatfilereader


    【解决方案1】:

    您始终可以在 Spring Batch 中编写自定义编写器,就像下面的示例一样。您将文件中的数据读取到内存中,然后使用您打算使用的数据更新同一文件。

    https://github.com/pkainulainen/spring-batch-examples/tree/master/spring/src/main/java/net/petrikainulainen/springbatch/custom/in

    不仅如此 FlatFileItemReader 不是线程安全的。当然,有一些技巧可以实现线程安全,但使用这种技巧并不是一个好习惯,创建自定义编写器总是好的。

    【讨论】:

      【解决方案2】:

      简短的回答是否定的,SB 不允许您覆盖正在读取的同一文件。

      更好的做法是编写一个中间文件,然后执行删除/重命名。

      写一个临时文件并不是一件“坏事”,尤其是当您正在处理巨大的输入文件并且 OutOfMemoryException 即将到来时;如果删除/重命名过程失败,也可以使用临时文件使您的步骤可重新启动,并允许您手动检索已翻译的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 2020-02-10
        • 1970-01-01
        • 2019-01-26
        • 2013-12-13
        • 1970-01-01
        • 2018-03-31
        • 1970-01-01
        相关资源
        最近更新 更多