0

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

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

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

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

谢谢你的帮助。

4

2 回答 2

1

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

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

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

于 2017-12-05T15:59:42.613 回答
0

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

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

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

于 2017-12-29T07:54:54.787 回答