Spring 批处理:MultiResourcePartitioner 如何按名称文件设置顺序资源
Spring Batch : MultiResourcePartitioner How to set order resources by name files
我有工作 Spring 批处理,它读取和写入多个文件,为此我使用 MultiResourcePartitioner 读取多个文件。
当我将文件列表设置为资源 (partitionner.setResources(listFiles)) 时,pMultiResourcePartitioner 随机处理文件不遵守 listFiles
中的文件顺序
这是我的代码:
@Bean
@JobScope
public MultiResourcePartitioner paritioner() throws IOException {
MultiResourcePartitioner partitioner = new MultiResourcePartitioner();
Resource[] resources = new Resource[listFiles.size()];
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
HashMap<Integer, String> collect = listFiles
.stream().sorted(Comparator.reverseOrder()).collect(HashMap<Integer, String>::new, (map, streamValue) -> map.put(map.size(), streamValue), (mapFirst, mapSecond) -> {
});
collect.forEach((index, value) -> resources[index] = resolver.getResource("file:" + value));
partitioner.partition(1);
partitioner.setResources(resources);
return partitioner;
}
如何避免在 MultiResourcePartitioner 中随机处理文件
当您决定使用分区步骤时,您应该假设分区将由不同的工作程序(可能是本地线程或远程工作程序 JVM)并行处理。并行与排序不兼容。未定义的分区处理顺序。
在您的情况下,MultiResourcePartitioner
将为每个文件创建一个分区,并且每个文件将由不同的工作人员处理。将资源传递给分区程序的顺序无关紧要(也不应该)。
我有工作 Spring 批处理,它读取和写入多个文件,为此我使用 MultiResourcePartitioner 读取多个文件。
当我将文件列表设置为资源 (partitionner.setResources(listFiles)) 时,pMultiResourcePartitioner 随机处理文件不遵守 listFiles
中的文件顺序这是我的代码:
@Bean
@JobScope
public MultiResourcePartitioner paritioner() throws IOException {
MultiResourcePartitioner partitioner = new MultiResourcePartitioner();
Resource[] resources = new Resource[listFiles.size()];
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
HashMap<Integer, String> collect = listFiles
.stream().sorted(Comparator.reverseOrder()).collect(HashMap<Integer, String>::new, (map, streamValue) -> map.put(map.size(), streamValue), (mapFirst, mapSecond) -> {
});
collect.forEach((index, value) -> resources[index] = resolver.getResource("file:" + value));
partitioner.partition(1);
partitioner.setResources(resources);
return partitioner;
}
如何避免在 MultiResourcePartitioner 中随机处理文件
当您决定使用分区步骤时,您应该假设分区将由不同的工作程序(可能是本地线程或远程工作程序 JVM)并行处理。并行与排序不兼容。未定义的分区处理顺序。
在您的情况下,MultiResourcePartitioner
将为每个文件创建一个分区,并且每个文件将由不同的工作人员处理。将资源传递给分区程序的顺序无关紧要(也不应该)。