0

我一直在关注本书的第十一章: https ://www.apress.com/gp/book/9781484237236#:~:text=The%20Definitive%20Guide%20to%20Spring%20Batch%20covers%20how,5%2C %20and%20the%20new%20Spring%20Boot%202%20微框架

我正在尝试实现一个多资源分区器。现在这是我正在使用的代码:

@Bean
    @StepScope
    public MultiResourcePartitioner multiResourcePartitioner(@Value("#{jobParameters['inputFiles']}")Resource[] resources){
        MultiResourcePartitioner partitioner = new MultiResourcePartitioner();
        partitioner.setKeyName("file");
        partitioner.setResources(resources);
        return partitioner;
    }

这应该向每个步骤发送要读取和处理的文件的名称。为了传递参数,我正在执行以下操作:

Map<String, JobParameter> parameters = new HashMap<>();
        JobParameter parameter = new JobParameter(new Date());
        parameters.put("currentTime", parameter);

        parameters.put("inputFiles", new JobParameter("1.csv;2.csv"));

但是当我调试 MultiResourcePartitioner 类时,我看到的是:

在此处输入图像描述

有谁知道获取资源数组作为 MultiResourcePartitioner 类的输入的语法是什么?

书中所说的内容如下:“我们需要在此分区器上设置的另一个值是资源数组。一旦完成,我们就可以返回实例”

4

1 回答 1

0

@Bean public MultiResourcePartitioner multiResourcePartitioner(@Value("classpath:multifile/*csv") Resource[] externalResources){ MultiResourcePartitioner partitioner = new MultiResourcePartitioner(); partitioner.setKeyName("file"); partitioner.setResources(externalResources); return partitioner; }

我不得不摆脱根本不起作用的SpEL,甚至无法读取单个文件。我意识到分区器不需要 beanscope(从具有多个线程的数据库中读取时它不使用它),所以我只是将资源数组传递给 bean 并且它工作。

于 2021-08-24T16:14:24.163 回答