【问题标题】:Dynamically changing name of output excel file when importing it via spring batch framework通过spring批处理框架导入时动态更改输出excel文件的名称
【发布时间】:2021-06-16 10:16:08
【问题描述】:

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

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(样本名称)。

我想知道如果参数中已经指定了名称,那么如何在出错的情况下动态更改文件名。

【问题讨论】:

  • 该状态是如何计算/确定的?请举一个具体的输入/输出文件的例子,以便能够有效地帮助你。
  • 我已经添加了输出文件。没有状态列的输入文件是相同的。如果 excel 中的特定行已成功保存在数据库中,则输出文件的状态列将设置为该特定行的 SUCCESS 否则可能会出现一些异常,例如某些验证失败,然后将在状态列中设置该特定异常。现在假设该文件包含异常,那么我们应该能够将该文件命名为上述问题中提到的文件。

标签: spring-boot spring-batch


【解决方案1】:

你有两个选择:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多