我一直在使用spring批处理为特定文件夹生成一组csv文件。最后一项任务是生成所有文件名的MD5哈希码,然后将该哈希值写入同一文件夹中的文件。
我不确定我是应该将此步骤仅作为Tasklet实现还是使用普通的读取器,处理器和编写器配置。
我知道我可以轻松地将所有文件名添加到列表中,可以传递任何这些对象类型。
我知道我可以实现用于在处理器或tasklet中生成MD5哈希的代码。
我不确定如何将生成的哈希代码传递给FlatFileWriter?
如果我使用标准步骤模式,我的阅读器应配置什么?
我很欣赏这个问题并没有严格的技术答案,但我很欣赏任何有关如何在这种情况下最好地使用Spring Batch的建议。
答案 0 :(得分:1)
例如:
ItemReader<Resource>
将所有文件名传递给资源Processor<Resource,MD5>
以最快方式计算哈希值FlatFileItemWriter<MD5>
将哈希写入输出文件
但是你“失去”可重启性,因为你可以从整个文件而不是从中间重启(例如):如果文件很小,这个解决方案很容易实现使用
MultiResourceItemReader
,其中包含自定义ItemReader<MD5ResourceBean>
代表ItemProcess<MD5ResourceBean,MD5ResourceBean>
ItemWriter<MD5ResourceBean>
,用于计算总MD5值
对于某个资源(存储在执行上下文中以及当前资源名称)以及何时
传递给下一个资源写入以前资源的MD5值
你的档案 MD5ResourceBean
使用以下属性定义:
Resource resource
:md5计算下的当前资源byte[] buffer
:最后一块文件读取MD5 bufferMD5
:最后一个缓冲区的MD5(由处理器计算)这个解决方案可能有点复杂,但可以提供完全可重启性,也可以很好地处理大文件!
作为第三个选项a SystemCommandTasket
,如果您已经有一个可以一次处理所有文件并将结果写入文件的外部程序。
我希望我能提供帮助(而且很明确,英语不是我的母语)。