gpt4 book ai didi

java - FlatFileItemWriter 在每个 JobExecution 上写入新的(不存在的)文件

转载 作者:行者123 更新时间:2023-12-02 09:14:31 26 4
gpt4 key购买 nike

我目前正在从事 Spring Batch CSV 导出工作。使用基于Chunk的读取器、写入器、处理器。读取和处理工作完美,但 FlatFileItemWriter 始终覆盖输出 CSV 文件。我希望作业检查文件是否存在(如果存在)增加文件名并写入新文件。

这是我当前的代码:我的 Helper 类,用于检查文件是否存在并返回新的字符串供 Writer 使用。

import java.io.File;

import org.springframework.stereotype.Component;

@Component
public class OrderFileManager {

private final String orderDesc = "order";
private final String fileEnding = ".csv";

public String getEmptyOrderNameString() {

int fileNumber = 1;
String answer = orderDesc + fileNumber + fileEnding;

while (new File(answer).exists()) {
fileNumber = fileNumber + 1;
answer = orderDesc + fileNumber + fileEnding;
}
return answer;
}
}

我的项目作家:

    @Bean
public FlatFileItemWriter<UltravisionOrder> writer(String fileName) {
FlatFileItemWriter<UltravisionOrder> writer = new FlatFileItemWriter<UltravisionOrder>();
writer.setResource(new FileSystemResource(fileName));
DelimitedLineAggregator<UltravisionOrder> delimitedLineAggregator = new DelimitedLineAggregator<UltravisionOrder>();
delimitedLineAggregator.setDelimiter(";");
BeanWrapperFieldExtractor<UltravisionOrder> fieldExtractor = new BeanWrapperFieldExtractor<UltravisionOrder>();
fieldExtractor.setNames(new String[] { "col1", "col2", "col3", ... });
delimitedLineAggregator.setFieldExtractor(fieldExtractor);
writer.setLineAggregator(delimitedLineAggregator);
return writer;
}

每次执行作业时,FileWriter 都会写入同一个输出文件。OrderFileManager 在作业中 Autowiring 。写入者接收 OrderFileManager。 getEmptyOrderNameString() 作为参数。

最佳答案

如果在每次作业运行时未重新加载 Spring 应用程序上下文,则文件写入器 bean 将被重新使用,并且将始终写入相同的资源。

您可以做的是让您的编写器步骤范围并通过调用使用 SpEL 表达式生成文件名的方法来配置它:

@Bean
@StepScope
public FlatFileItemWriter<UltravisionOrder> itemWriter(@Value("#{orderFileManager.getEmptyOrderNameString()}") String fileName) {
// ...
}

关于java - FlatFileItemWriter 在每个 JobExecution 上写入新的(不存在的)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com