gpt4 book ai didi

java - 在 Spring 批处理中,我们如何将处理过的文件移动到另一个文件夹,我正在使用 MultiResourceItemReader 和 block 处理

转载 作者:行者123 更新时间:2023-12-05 06:56:25 25 4
gpt4 key购买 nike

在 Spring 批处理应用程序中,我们如何在处理每个文件时将文件从 BatchFileDir 文件夹移动到目标文件夹。 BatchFileDir 文件夹中会有一堆文件,所以我正在使用 MultiResourceItemReader。我也在关注基于 block 的处理。

我有所有的批处理文件:

    @Value("BatchFileDir/batchFile_*.csv")
private Resource[] allBatchFiles;

项目阅读器是:

    @Bean
public MultiResourceItemReader<MyServiceRequest> multiResourceItemReader() {
MultiResourceItemReader<MyServiceRequest> resourceItemReader = new
MultiResourceItemReader<MyServiceRequest>();
resourceItemReader.setResources(allBatchFiles);
FlatFileItemReader<Record> reader = new FlatFileItemReader<>();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
String[] tokens = {"id", "name", "author", "subject"};
tokenizer.setNames(tokens);
DefaultLineMapper< MyServiceRequest> lineMapper = new DefaultLineMapper<>();
lineMapper.setLineTokenizer(tokenizer);
lineMapper.setFieldSetMapper(new RecordFieldSetMapper());
reader.setLinesToSkip(1);
reader.setLineMapper(lineMapper);
resourceItemReader.setDelegate(reader);
return resourceItemReader;
}

项目处理器是:

    @Bean
public ItemProcessor< MyServiceRequest, MyServiceResponse> itemProcessor() {
return new ModifiedItemProcessor();
}

ModifiedItemProcessor 是:

    public class ModifiedItemProcessor implements ItemProcessor< MyServiceRequest, 
MyServiceResponse > {

public MyServiceResponse process(MyServiceRequest item) {
// interact with other Microservices and get the response
return response;

步骤是:

       @Bean
protected Step step(@Qualifier("itemProcessor") ItemProcessor<MyServiceRequest,
MyServiceResponse> processor, ItemWriter<MyServiceRequest> writer) {
return stepBuilderFactory
.get("myStep")
.<MyServiceRequest, MyServiceResponse> chunk(99)
.reader(multiResourceItemReader())
.processor(processor)
.writer(writer)
.build();
}

最佳答案

我看不到每个文件一经处理就移动的附加值,因为所有文件无论如何都会在该步骤之后移动。监听器方法应该有效,但在 Windows 上存在 Unresolved 问题 (https://github.com/spring-projects/spring-batch/issues/1500)。因此,我建议在主要步骤之后使用单独的步骤来移动文件。为此,您可以在该步骤中注入(inject)相同的资源并在 tasklet 中移动文件。

关于java - 在 Spring 批处理中,我们如何将处理过的文件移动到另一个文件夹,我正在使用 MultiResourceItemReader 和 block 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65147773/

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