我按照以下方式开始工作:
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
,我宁愿在ItemProcessor
的process
方法(请注意,一次只处理一个项目)中执行此操作,返回结果,然后让ListItemWriter
接收所有结果并将它们存储在可以通过方法ListItemWriter.getWrittenItems
访问的List
中。