如何使用spring-batch和MultiResourceItemReader读取文件夹中的所有文件?

mem*_*und 10 java directory spring file spring-batch

我想配置spring-batchcsv按顺序读取特定文件夹中的所有文件.

以下方法不起作用,因为委托将尝试打开一个名为的文件*.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;
}
Run Code Online (Sandbox Code Playgroud)

等效的xml配置如下所示,如何将其重写为仅限java的配置?

<bean id="reader" class="org.springframework.batch.item.file.MultiResourceItemReader">
        <property name="resources" value="/mypfolder/*.csv"/>
        <property name="delegate" ref="flatFileItemReader"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

Tha*_*iya 10

像这样使用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;
Run Code Online (Sandbox Code Playgroud)

}


小智 5

或者,@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;
}
Run Code Online (Sandbox Code Playgroud)