В весеннем пакете, как мы можем переместить обработанные файлы в другую папку, я использую MultiResourceItemReader и обработку фрагментов
В пакетном приложении Spring, как мы можем перемещать файлы из папки BatchFileDir в папку назначения по мере обработки каждого файла. В папке BatchFileDir будет куча файлов, поэтому я использую MultiResourceItemReader. Я также слежу за обработкой на основе фрагментов.
У меня есть все командные файлы как:
@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();
}
1 ответ
Я не вижу дополнительной ценности перемещения каждого файла, как только он будет обработан, поскольку все файлы все равно будут перемещены после этого шага. Подход слушателя должен работать, но в Windows есть открытая проблема (https://github.com/spring-projects/spring-batch/issues/1500). Следовательно, я рекомендую использовать отдельный шаг для перемещения файлов после основного шага. Для этого вы можете внедрить те же ресурсы на этом шаге и переместить файлы в тасклет.