简体   繁体   English

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

[英]How to read all files in a folder with spring-batch and MultiResourceItemReader?

I want to configure spring-batch to read all csv files inside a specific folder sequentially.我想将spring-batch配置为按顺序读取特定文件夹中的所有csv文件。

The following does not work because the delegate will try to open a file named *.csv , which of course is invalid.以下不起作用,因为委托将尝试打开名为*.csv的文件,这当然是无效的。 What do I have to change here?我在这里需要改变什么?

    @Bean
    public ItemReader<String> reader() {
        MultiResourceItemReader<String> reader = new MultiResourceItemReader<>();
        reader.setResources(new Resource[] {new FileSystemResource("/myfolder/*.csv")});
        reader.setDelegate(new FlatFileItemReader<>(..));
        return reader;
}

The equivalent xml configuration would be written as follows, how could I rewrite it to java only config?等价的 xml 配置会写成如下,我怎么能把它改写成 java only config?

<bean id="reader" class="org.springframework.batch.item.file.MultiResourceItemReader">
        <property name="resources" value="/mypfolder/*.csv"/>
        <property name="delegate" ref="flatFileItemReader"/>
</bean>

Use PathMatchingResourcePatternResolver like this.像这样使用 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;
}

我认为您应该使用PathMatchingResourcePatternResolver

Alternatively @Value annotation can be used to let ResourceArrayPropertyEditor convert string to 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;
}

Read multiple files from Absolute file path :绝对文件路径读取多个文件:

 @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;
      }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用spring-batch连续读取文件夹中的文件? - How to continuously read files from a folder with spring-batch? 如何使用Spring-Batch读取多个文件? - How to read multiple files in chunks using Spring-Batch? 在 spring 批处理中,我们如何将处理后的文件移动到另一个文件夹,我正在使用 MultiResourceItemReader 和块处理 - In spring batch how can we move the processed files to another folder, I am using MultiResourceItemReader and chunk processing Spring 引导批处理 MultiResourceItemReader:如何使用 @Value() 从 jar 位置读取文件 - Spring boot batch MultiResourceItemReader: how to read files using @Value() from jar location 如何使用MultiResourceItemReader读取多个文件? - How to read multiple files with MultiResourceItemReader? Spring批处理MultiResourceItemReader-仅用于合并文件? - Spring batch MultiResourceItemReader - only used for combining files? spring-batch以空int值读取 - spring-batch read in null int values 在Spring Batch中解密后通过MultiResourceItemReader读取文件 - Reading Files thru MultiResourceItemReader after de-cryption in Spring Batch 如何使用 Spring-Batch 批量插入? - How to bulk insert using Spring-Batch? 如何在spring-batch中写入压缩文件 - How to write to a compressed file in spring-batch
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM