【问题标题】:Read all files from directory Spring batch FileReadingMessageSource从目录 Spring 批处理 FileReadingMessageSource 中读取所有文件
【发布时间】:2019-05-20 03:14:42
【问题描述】:

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

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    IMO 您不需要在基本用例中使用FileReadingMessageSource(并介绍 Spring 集成)。

    您可以创建一个返回 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);
    }
    

    【讨论】:

    • 这不是解决方案。我只是想让一个阅读器返回一个文件列表,而不仅仅是一个文件。
    • 添加了阅读器的示例。如果您想要一个读取器一次返回目录中所有文件的列表,那么您可能需要使用 tasklet 而不是面向块的步骤。 Spring Batch 中块处理的想法是一次读取一个项目(在您的情况下为文件)。
    • 谢谢您-您的回答和读者示例将我带到了docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/…,并且是有关如何将图像文件(*.arw、*.jpg)读入 Spring Batch 步骤的第一个提示,尽管我我还在通过springer.com/de/book/9781484237236 的路上(ItemReader 部分不包括“二进制”文件格式)。
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2012-07-30
    相关资源
    最近更新 更多