spring-boot - 通过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(示例姓名)。
我想知道参数中是否已经指定了名称,那么如何在出现错误时动态更改文件名。
解决方案
你有两个选择:
- 预先确定至少要写入的行之一将具有“异常”状态,并使用正确的文件名动态配置写入器。您可以创建一个
Tasklet
执行检查并将信息放入执行上下文的步骤。面向块的下一步可以使用步进范围的编写器,该编写器使用执行上下文中预先计算的文件名动态配置,例如:
@Bean
@StepScope
public FlatFileItemWriter itemWriter(@Value("#{jobExecutionContext['fileName']}") String fileName) {
return new FlatFileItemWriterBuilder()
.resource(new FileSystemResource(fileName))
// set other properties
.build();
}
- 使用后续步骤检查写入的行之一是否具有“异常”状态并相应地重命名文件
推荐阅读
- c++ - 目前对c ++中的“类的工作”非常困惑,有人可以通过示例提供直观的解释吗?
- python - 哈希函数不会为相同的输入返回相同的输出
- javascript - 处理 Promise 中错误的正确方法
- python - 创建一个新列,根据条件查找日期差异
- serialization - FlatBuffers 和 NULL 值
- jquery - Laravel:无法将正确的参数传递给 DataTable 按钮中的路由
- python - 没有这样的表:main.auth_user__old
- python - 如何导入用其他版本的python编写的程序?
- python - Pytorch 中的连体神经网络
- c - 为什么函数不适用于指针的使用?