我目前在 Spring Batch 作业中有以下处理:
- FlatFileItemReader 读取 CSV 文件
- 处理器做一些工作
- FlatFileItemWriter 创建读取文件的镜像,但更新文件以反映处理
我不想写入新文件,但我想更新处理期间正在读取的同一文件。
我的问题是,Spring 中是否有一种典型的方法来使用 FlatFileItemReader,然后在运行时更新处理器中每行的同一个文件?
谢谢你的帮助。
我目前在 Spring Batch 作业中有以下处理:
我不想写入新文件,但我想更新处理期间正在读取的同一文件。
我的问题是,Spring 中是否有一种典型的方法来使用 FlatFileItemReader,然后在运行时更新处理器中每行的同一个文件?
谢谢你的帮助。
您始终可以在 Spring Batch 中编写自定义编写器,就像下面的示例一样。您将文件中的数据读取到内存中,然后使用您打算使用的数据更新同一文件。
不仅如此 FlatFileItemReader 不是线程安全的。当然,有一些技巧可以实现线程安全,但使用这种技巧并不是一个好习惯,创建自定义编写器总是好的。
简短的回答是否定的,SB 不允许您覆盖正在读取的同一文件。
更好的做法是编写一个中间文件,然后执行删除/重命名。
写一个临时文件并不是一件“坏事”,尤其是当您正在处理巨大的输入文件并且 OutOfMemoryException 即将到来时;如果删除/重命名过程失败,还可以使用临时文件使您的步骤可重新启动,并允许您手动检索翻译的文件。