从目录Spring批处理FileReadingMessageSource

时间:2018-12-19 15:32:30

标签: spring spring-batch

我正在为应用程序使用spring batch。基本上,我要做的就是从输入目录中读取所有XML文件。当我获得所有XML文件时,每个文件都需要转换为根对象。我必须将该对象拆分为两个对象,然后将它们打印到CSV文件中。因此,如果输入文件夹中有10个XML文件,则需要生成20行的CSV文件。如果有150,则CSV将有300行,依此类推。我打算使用FileReadingMessageSource。它有一个队列。但是,问题在于该队列的返回类型。它返回File,而我需要的是队列列表。我能以某种方式从阅读器的目录中获取XML文件的整个列表吗?

1 个答案:

答案 0 :(得分:1)

IMO,您不需要在基本用例中使用FileReadingMessageSource(并引入Spring Integration)。

您可以创建一个返回File的阅读器,一个将File映射到您的根对象(并分成两个对象)的处理器,最后是一个FlatFileItemWriter来生成CSV输出。

编辑:添加阅读器示例:

@Bean
public ItemReader<File> itemReader() throws IOException {
    List<File> files = Files.walk(Paths.get("/path/to/directory"))
            .filter(Files::isRegularFile)
            .map(Path::toFile)
            .collect(Collectors.toList());
    return new IteratorItemReader<>(files);
}