【问题标题】:How to pass parameters from Execution context to MultiResourcePartitioner如何将参数从执行上下文传递到 MultiResourcePartitioner
【发布时间】:2021-10-24 04:08:27
【问题描述】:

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

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

@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 类的输入的语法是什么吗?

这本书的内容如下: “我们需要在这个 Partitioner 上设置的另一个值是 资源。完成后,我们可以返回实例”

【问题讨论】:

  • 您可以将作业参数作为带有匹配所有文件的通配符的字符串传递,例如parameters.put("inputFiles", new JobParameter("/data/*.csv"));。 Spring 会将它们转换为资源数组。你可以在这里找到一个例子:github.com/mminella/scaling-demos/tree/master/partitioned-demo。这是你要找的吗?
  • parameters.put("inputFiles", new Parameter("\\multifile\\*.csv"));不起作用,资源数组只是空的。我必须更改分隔符,因为我在 Windows 上

标签: spring-boot spring-batch partitioning


【解决方案1】:

@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 并且它工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2012-07-26
    相关资源
    最近更新 更多