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

问题描述 投票:0回答:2

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

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

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

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

谢谢你的帮助。

java spring spring-batch flatfilereader
2个回答
1
投票

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

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.