在一个步骤中使用 MultiResourceItemWriter 写入多个 CSV 文件。在 Step 中编写各种文件后,我希望能够使用 StepExecutionListener 将这些文件通过电子邮件发送给适当的接收者。
但是,问题是我如何知道哪些文件应该发送到哪个电子邮件?文件名或后缀(我有一个自定义 ResourceSuffixCreator 但它只获取一个索引,无法帮助识别另一个文件中的一个文件。)
使用弹簧靴 2.2.7。
谢谢你的帮助。
更新 我说,这项工作的步骤。成功步骤使用 MultiResourceItemWriter 为每个电子邮件目标输出成功相关文件。
return this.stepBuilderFactory.get("generateSuccessRecords")
.<SuccessReport, SuccessReport>chunk(1)
.reader(successReportItemReader(null, null))
.processor(itemProcessor)
.writer(successReportItemWriter(null))
.build();
successReportItemWriter 是一个 MultiResourceItemWriter,它委托给一个
return new MultiResourceItemWriterBuilder<SuccessReport>()
.name("successReportItemWriter")
.itemCountLimitPerResource(1)
.delegate(individualSuccessReportItemWriter())
.resource(new FileSystemResource(jobReportDirectory + "/successReport"))
.resourceSuffixCreator(suffixCreator)
.build();
individualSuccessReportItemWriter() 如下。
FlatFileItemWriter<SuccessReport> itemWriter = new FlatFileItemWriter<>();
itemWriter.setName("individualSuccessReportItemWriter");
itemWriter.setHeaderCallback(new SuccesssReportHeaderCallback());
itemWriter.setLineAggregator(new SuccessReportLineAggregator());
在 Success 步骤生成 SuccessReport 之后,Fallout 步骤将从 DB 中查询并重复上述操作,为每个电子邮件目标创建 FalloutReport .csv 文件,再次使用 MultiResourceItemWriter。
目标是能够通过电子邮件将成功报告和辐射报告 .csv 文件作为附件发送给每个电子邮件目标。假设有 25 个电子邮件目标。由于运行 2 个步骤(成功和失败),将生成 25 个成功 .CSV 文件和 25 个失败 .CSV 文件。每个电子邮件目标将获得 1 个成功和 1 个失败的 .csv 文件作为附件。
SuccessReport 和 FalloutReport 类在生成 .csv 文件时具有电子邮件 Target —— 但是由于后缀 Creator 不允许相应地命名它们,因此无法命名文件。