首页 > 解决方案 > 通过spring批处理框架导入时动态更改输出excel文件的名称

问题描述

我有一个导入 excel 文件的 spring 批处理应用程序,它会生成一个带有状态列的输出 excel 文件,可以是成功也可以是失败。目前该应用程序正在工作文件。下面是准备作业参数的代码

JobParameters jobParametersBuilder = new JobParametersBuilder().addString(TYPE, type)
    .addString(NAME, name).addString(FULL_PATH_FILE_NAME, filePath)
    .addLong(TIME, System.currentTimeMillis()).addString(OUTPUT_FILE_NAME, outputFile)
    .addString(INPUT_FILE_NAME, inputFile).toJobParameters();

如您所见,我已经在参数中指定了输出文件的名称。现在如上所述,可以在输出 excel 文件的状态列中输入两个值。如果状态栏中有一些错误,有什么方法可以更改输出文件名

例如:如果任何状态列中没有错误,则输出名称应与之前的 output-xyz_currentTimeStamp(示例名称)相同,但如果状态列中存在错误,则文件名称应为 output/error-xyz_currentTimeStamp(示例姓名)。

我想知道参数中是否已经指定了名称,那么如何在出现错误时动态更改文件名。

在此处输入图像描述

标签: spring-bootspring-batch

解决方案


你有两个选择:

  1. 预先确定至少要写入的行之一将具有“异常”状态,并使用正确的文件名动态配置写入器。您可以创建一个Tasklet执行检查并将信息放入执行上下文的步骤。面向块的下一步可以使用步进范围的编写器,该编写器使用执行上下文中预先计算的文件名动态配置,例如:
@Bean
@StepScope
public FlatFileItemWriter itemWriter(@Value("#{jobExecutionContext['fileName']}") String fileName) {
    return new FlatFileItemWriterBuilder()
            .resource(new FileSystemResource(fileName))
            // set other properties
            .build();
}
  1. 使用后续步骤检查写入的行之一是否具有“异常”状态并相应地重命名文件

推荐阅读