如何将参数从执行上下文传递到 MultiResourcePartitioner
How to pass parameters from Execution context to MultiResourcePartitioner
我正在尝试实现多资源分区器。现在这是我正在使用的代码:
@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 class 时,我看到的是:
有谁知道获取资源数组作为 MultiResourcePartitioner 输入的语法是什么 class?
书上说的是:
“我们需要在这个 Partitioner 上设置的另一个值是数组
资源。完成后,我们可以 return 实例
@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 并且它起作用了。
我正在尝试实现多资源分区器。现在这是我正在使用的代码:
@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 class 时,我看到的是:
有谁知道获取资源数组作为 MultiResourcePartitioner 输入的语法是什么 class?
书上说的是: “我们需要在这个 Partitioner 上设置的另一个值是数组 资源。完成后,我们可以 return 实例
@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 并且它起作用了。