在Spring Batch中更新FlatFileItemReader之后的文件

时间:2017-12-05 15:35:49

标签: java spring spring-batch flatfilereader

我目前在Spring Batch作业中进行了以下处理:

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您总是可以在春季批处理中编写自定义编写器,就像下面的示例一样。从文件中将数据读入内存,然后使用您想要的数据更新同一文件。

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

不仅仅是FlatFileItemReader不是线程安全的。当然有一些黑客可以实现线程安全但不是使用这种黑客的好习惯,它总是很好地创建自定义编写器。

答案 1 :(得分:0)

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

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

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