如何将数据放入编写器内部的工作范围地图?



我按照以下方式开始工作:

jobExecution = jobLauncher.run(job, jobParameters);
jobExecution... /// I want to get Map with results here

我还有以下作家:

@Component
public class MyWriter implements ItemWriter<MyBean> {
@Override
public void write(@NonNull List<? extends MyBean> items) throws Exception {
MyResult result = someComponent.doSmth(items);
}
}
}

我想将结果放入 Map 以收集单个作业执行中的所有结果。

我怎样才能实现它?

您可以将结果放在作业执行上下文中,如下所示:

@Component
public class MyWriter implements ItemWriter<MyBean> {
private JobExecution jobExecution;
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
jobExecution = stepExecution.getJobExecution();
}
@Override
public void write(@NonNull List<? extends MyBean> items) throws Exception {
MyResult result = someComponent.doSmth(items);
jobExecution.getExecutionContext().put("result", result); // not sure how you are planning to use a map here
}
}

然后从返回的作业执行的执行上下文中获取它:

jobExecution = jobLauncher.run(job, jobParameters);
// I want to get Map with results here
MyResult result = jobExecution.getExecutionContext().get("result"); 

不确定为什么要以及如何在Map中收集结果,但如果List(之后您可以转换为Map)也可以,那么这里有一个想法:

与其在自定义ItemWriter中调用someComponent.doSmth,我宁愿在ItemProcessorprocess方法(请注意,一次只处理一个项目)中执行此操作,返回结果,然后让ListItemWriter接收所有结果并将它们存储在可以通过方法ListItemWriter.getWrittenItems访问的List中。

最新更新