Spring Batch - 在Chunk Read之前解密

时间:2013-11-14 01:22:48

标签: spring-batch

我正在使用春季批次,需要一些关于如何继续的建议......

我有一个加密文件,需要解密并存储在内存中(而不是文件中)。一旦解密,我想使用一个块读取器使用spring batch的块读取器 - 处理器逐行处理解密文件。

如何配置块读取器/解析内存中的流?

2 个答案:

答案 0 :(得分:1)

您可以分两步完成:

  1. 使用Tasklet
  2. 将您的文件解密到内存中(例如在byte[]中)
  3. 使用标准FlatFileItemReader作为读者资源,使用基于byte[](如ByteArrayResource)作为输入的新创建资源(作为替代方案,您可以编写自定义阅读器)

答案 1 :(得分:1)

正如上一篇答案中所说的bellabax,使用Tasklet解密您的文件,并将解密的文件路径存储在您的工作环境中:

ExecutionContext jobExecutionContext = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext();
jobExecutionContext.putString("decryptedFilePath", decryptedFilePath);

在您的工作环境中添加您的工作的解密文件资源(不要忘记工作范围):

<bean id="decryptedFileResource" class="org.springframework.core.io.FileSystemResource" scope="step">
    <constructor-arg value="#{jobExecutionContext['decryptedFilePath']}" />
</bean>

最后使用Chunk作为读者,FlatFileItemReader指向 decryptedFileResource ,并作为编写者将数据存储在内存中。

希望可以帮到你。