[SPRING] spring-batch와 MultiResourceItemReader로 폴더의 모든 파일을 읽는 방법?
SPRINGspring-batch와 MultiResourceItemReader로 폴더의 모든 파일을 읽는 방법?
특정 폴더 안에있는 모든 csv 파일을 순차적으로 읽도록 spring-batch를 구성하려고합니다.
위임자가 * .csv라는 파일을 열려고 시도하기 때문에 다음은 작동하지 않습니다. 물론 이것은 유효하지 않습니다. 여기서 무엇을 바꾸어야합니까?
@Bean
public ItemReader<String> reader() {
MultiResourceItemReader<String> reader = new MultiResourceItemReader<>();
reader.setResources(new Resource[] {new FileSystemResource("/myfolder/*.csv")});
reader.setDelegate(new FlatFileItemReader<>(..));
return reader;
}
동등한 XML 구성은 다음과 같이 작성됩니다. 어떻게 Java에만 구성을 다시 작성할 수 있습니까?
<bean id="reader" class="org.springframework.batch.item.file.MultiResourceItemReader">
<property name="resources" value="/mypfolder/*.csv"/>
<property name="delegate" ref="flatFileItemReader"/>
</bean>
해결법
-
==============================
1.PathMatchingResourcePatternResolver를 사용해야한다고 생각합니다.
PathMatchingResourcePatternResolver를 사용해야한다고 생각합니다.
-
==============================
2.이처럼 PathMatchingResourcePatternResolver를 사용하십시오.
이처럼 PathMatchingResourcePatternResolver를 사용하십시오.
@Bean public ItemReader<String> reader() { Resource[] resources = null; ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver(); try { resources = patternResolver.getResources("/myfolder/*.csv"); } catch (IOException e) { e.printStackTrace(); } MultiResourceItemReader<String> reader = new MultiResourceItemReader<>(); reader.setResources(resources); reader.setDelegate(new FlatFileItemReader<>(..)); return reader;
}
-
==============================
3.절대 파일 경로에서 여러 파일 읽기 :
절대 파일 경로에서 여러 파일 읽기 :
@Bean public MultiResourceItemReader<POJO> multiResourceItemReader() { MultiResourceItemReader<POJO> resourceItemReader = new MultiResourceItemReader<POJO>(); ClassLoader cl = this.getClass().getClassLoader(); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl); Resource[] resources = resolver.getResources("file:" + filePath ); resourceItemReader.setResources(resources); resourceItemReader.setDelegate(reader()); return resourceItemReader; } @Bean public FlatFileItemReader<POJO> reader() { FlatFileItemReader<POJO> reader = new FlatFileItemReader<POJO>(); reader.setLineMapper(new DefaultLineMapper() {{ setLineTokenizer(new DelimitedLineTokenizer() {{ setNames(new String[]{"id1", "POJO"}); }}); setFieldSetMapper(new BeanWrapperFieldSetMapper<POJO>() {{ setTargetType(POJO.class); }}); }}); return reader; }
-
==============================
4.@Value 주석은 ResourceArrayPropertyEditor가 문자열을 Resource []로 변환시키는 데 사용될 수 있습니다.
@Value 주석은 ResourceArrayPropertyEditor가 문자열을 Resource []로 변환시키는 데 사용될 수 있습니다.
@Bean @StepScope public ItemReader<String> reader( @Value("file:/myfolder/*.csv") Resource[] resources ) { MultiResourceItemReader<String> reader = new MultiResourceItemReader<>(); reader.setResources(resources); reader.setDelegate(new FlatFileItemReader<>(..)); return reader; }
from https://stackoverflow.com/questions/31700520/how-to-read-all-files-in-a-folder-with-spring-batch-and-multiresourceitemreader by cc-by-sa and MIT license