从目录Spring批处理文件ReadingMessageSource读取所有文件
我在应用程序中使用spring批处理。基本上,我所要做的就是从输入目录中读取所有XML文件。当我得到所有XML文件时,每个文件都需要转换为根对象。我必须将该对象拆分为两个对象,并将它们打印到CSV文件中。因此,如果输入文件夹中有10个XML文件,我需要生成20行的CSV。如果有150行,CSV将有300行,等等。我打算使用从目录Spring批处理文件ReadingMessageSource读取所有文件,spring,spring-batch,Spring,Spring Batch,我在应用程序中使用spring批处理。基本上,我所要做的就是从输入目录中读取所有XML文件。当我得到所有XML文件时,每个文件都需要转换为根对象。我必须将该对象拆分为两个对象,并将它们打印到CSV文件中。因此,如果输入文件夹中有10个XML文件,我需要生成20行的CSV。如果有150行,CSV将有300行,等等。我打算使用FileReadingMessageSource。它有一个队列。但问题是该队列的返回类型。它返回文件,我需要的是队列列表。我可以从我的阅读器的目录中获取整个XML文件列表吗?I
FileReadingMessageSource
。它有一个队列。但问题是该队列的返回类型。它返回文件,我需要的是队列列表。我可以从我的阅读器的目录中获取整个XML文件列表吗?IMO您不需要在基本用例中使用FileReadingMessageSource
(并引入Spring集成)
您可以创建一个返回文件的读取器
,一个将文件
映射到根对象(并拆分为两个对象)的处理器,以及最后一个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);
}
@Bean
public ItemReader ItemReader()引发IOException{
List files=files.walk(path.get(“/path/to/directory”))
.filter(文件::isRegularFile)
.map(路径::toFile)
.collect(Collectors.toList());
返回新的IteratorItemReader(文件);
}
这不是解决方案。我只是想让阅读器返回一个文件列表,而不仅仅是一个文件。添加了一个阅读器示例。如果您想要一个阅读器同时返回目录中所有文件的列表,那么您可能需要使用tasklet而不是面向块的步骤。Spring批处理中块处理的思想是一次读取一个项目(您的案例中的文件)。谢谢您-您的回答和读者示例引导我找到并成为如何将图像文件(*.arw,*.jpg)读取到Spring批处理步骤中的第一个提示,尽管我仍在进行中(ItemReader部分不涉及“二进制”文件格式)。