Spring 批处理和 S3 集成 - 如何在开始读取之前首先从 S3 中删除空字符?

Spring Batch and S3 Integration - how to remove null characters first from S3 before start reading?

在我的例子中,我们从源系统获取 FlatFile 并将其保存在服务器上,然后由于某些自动化过程,我们将此文件推送到 Amazon S3 Bucket

源系统是大型机,它以某种方式将空字符放入平面文件中,这对他们来说是不可避免的。现在,在我们开始读取 FlatFile 之前,我们必须需要从 Amazon S3 存储桶中的文件中删除空字符(就像我们使用 linux 命令 - tr \'\000\' \' \' < \"%s\" > \"%s\" 所做的那样)。

到目前为止,我还没有找到无需下载即可删除空字符的方法(并非无法找到方法),一旦删除了空字符,就可以开始阅读了。

注意 - 由于我们已经在 PCF 上部署了批处理应用程序,我们无法在 PCF 上下载并删除 NULL 字符并再次上传,因为 PCF 支持团队确认 PCF 中的文件系统是暂时的,因此与文件相关的任何操作都是那里不建议。

我不知道你是否可以在不下载文件的情况下在 s3 中内联更改文件。也就是说,拥有临时文件系统并不意味着不进行任何文件操作,而是意味着不依赖于该 FS 进行持久存储。任何临时文件操作都可以在该 FS 上完成,没有任何问题。

所以即使 PCF 上的文件系统是瞬态的,我也没有看到在开始面向块的处理之前下载文件并在 tasklet 步骤中转换它的任何缺点(显然只要你有足够的 space 存储文件)。 SystemCommandTasklet 适合您的 tr 命令。该文件可以在最后一步或在作业侦听器中清理。