package com.oreilly.springdata.batch.config; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.MultiResourceItemReader; import org.springframework.batch.item.file.mapping.DefaultLineMapper; import org.springframework.batch.item.file.mapping.FieldSetMapper; import org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper; import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; import org.springframework.context.ResourceLoaderAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @Configuration public class BatchConfiguration implements ResourceLoaderAware { private ResourceLoader resourceLoader; @Bean public MultiResourceItemReader reader() { MultiResourceItemReader reader = new MultiResourceItemReader(); Resource[] resources = new Resource[] {resourceLoader.getResource("file:/tmp/import/products-*") }; reader.setResources(resources); FlatFileItemReader fileReader = new FlatFileItemReader(); fileReader.setLinesToSkip(1); DefaultLineMapper lineMapper = new DefaultLineMapper(); DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); tokenizer.setNames(new String[] { "ID", "NAME", "DESCRIPTION", "PRICE" }); FieldSetMapper fieldSetMapper = new PassThroughFieldSetMapper(); lineMapper.setLineTokenizer(tokenizer); lineMapper.setFieldSetMapper(fieldSetMapper); fileReader.setLineMapper(lineMapper); reader.setDelegate(fileReader); return reader; } public MultiResourceItemReader fluentReader() { ItemReaderBuilder b = new ItemReaderBuilder(); ItemReader flatFileReader = b.flatFileItemReader( b.delimitedLineTokenizer("ID,NAME,DESCRIPTION,PRICE"), b.passThroughFieldSetMapper() ); return b.multiResourceItemReader(flatFileReader, "file:/tmp/*"); } public MultiResourceItemReader morefluentReader() { ItemReaderBuilder b = new ItemReaderBuilder(); return b.multiResourceItemReader("file:/tmp/*", b.flatFileItemReader( b.delimitedLineTokenizer("ID,NAME,DESCRIPTION,PRICE"), b.passThroughFieldSetMapper() )); } @Override public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } }