【问题标题】:Spring Batch : MultiResourcePartitioner How to set order resources by name filesSpring Batch:MultiResourcePartitioner 如何通过名称文件设置订单资源
【发布时间】:2021-09-01 19:20:37
【问题描述】:

我有 Job Spring Batch 读取和写入多个文件,我使用 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中的随机进程文件

【问题讨论】:

标签: java spring spring-batch


【解决方案1】:

当您决定使用分区步骤时,您应该假设分区将由不同的工作人员(可能是本地线程或远程工作人员 JVM)并行处理。并行化与排序不兼容。未定义的分区处理顺序。

在您的情况下,MultiResourcePartitioner 将为每个文件创建一个分区,并且每个文件将由不同的工作人员处理。将资源传递给分区器的顺序并不(也不应该)重要。

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2023-04-02
    相关资源
    最近更新 更多