gpt4 book ai didi

java - Spring批处理文件归档

转载 作者:行者123 更新时间:2023-11-30 02:30:17 25 4
gpt4 key购买 nike

我目前正在学习 Spring Batch,并且面临着文件归档任务的挑战。基本上我需要读取单独的 CSV 文件并将它们放入一个新的存档文件夹中,并在原始文件名后附加当前日期。我想知道的是如何从 multiResourceItemReader 获取原始文件名,在 FlatfileItemWriter 中使用它作为文件名+日期,然后删除原始文件。

这是我当前的代码:

@Autowired
public JobBuilderFactory jobBuilderFactory;

@Autowired
public StepBuilderFactory stepBuilderFactory;

@Value("classpath*:/data/CSV_FOR_ARCHIVING*.csv")
private Resource inputFiles[];

@Bean
public MultiResourceItemReader<Person> multiResourceItemReader() {
MultiResourceItemReader<Person> itemReader = new MultiResourceItemReader<>();

itemReader.setDelegate(personItemReader());
itemReader.setResources(inputFiles);

return itemReader;
}

@Bean
public FlatFileItemReader<Person> personItemReader() {
FlatFileItemReader<Person> itemReader = new FlatFileItemReader<>();

itemReader.setLinesToSkip(1);

DefaultLineMapper<Person> personLineMapper = new DefaultLineMapper<>();

DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(new String[] { "id", "firstName", "lastName", "email", "gender" });

personLineMapper.setLineTokenizer(tokenizer);
personLineMapper.setFieldSetMapper(new PersonFieldSetMapper());
personLineMapper.afterPropertiesSet();

itemReader.setLineMapper(personLineMapper);

return itemReader;
}

@Bean
public FlatFileItemWriter<Person> jsonWriter() throws Exception {
FlatFileItemWriter<Person> personWriter = new FlatFileItemWriter<>();

personWriter.setLineAggregator(new PersonLineAggregator());
File outputPath = File.createTempFile("PersonOutput", ".csv", new File("C:/Users/default/Documents"));
System.out.println("Output Path: " + outputPath.getAbsolutePath());

personWriter.setResource(new FileSystemResource(outputPath));
personWriter.afterPropertiesSet();

return personWriter;
}

@Bean
public Step step1() throws Exception {
return stepBuilderFactory.get("step1").<Person, Person>chunk(10)
.listener(new ItemReaderListener())
.reader(multiResourceItemReader())
.writer(jsonWriter())
.build();
}

@Bean
public Job job() throws Exception {
return jobBuilderFactory.get("job")
.start(step1())
.build();
}

CSV files to be readed and archived separately

编辑1:感谢@Niraj 的回答,我已经实现了 ResourceAware,并且已经可以获得文件名。现在我的新问题是如何告诉我的 FlatFileItemWriter 在每次资源更改时创建并写入新文件?

最佳答案

使用ResourceAware接口(interface)获取当前文件名。和 ResourceSuffixCreator 接口(interface)来根据您的需要创建后缀

http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/ResourceAware.html http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/ResourceSuffixCreator.html

关于java - Spring批处理文件归档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44455863/

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