gpt4 book ai didi

java - 在 ItemReader/Processor/Writer 中访问 StepExecution/JobExecution 的最佳方式

转载 作者:行者123 更新时间:2023-11-30 07:44:00 25 4
gpt4 key购买 nike

我已经使用 SpringBatch 几个月了..我曾经将与执行相关的变量(如页数、项目数、批处理的当前位置等)存储到 Bean 中。然后使用 setVar()getVar( )-setter 和 getter。这些 bean 还通过手动同步在线程之间共享。

但现在我发现这可能是执行批处理作业的错误方法。挂载到 ItemReaders 的 Bean 无法持久保存在 JobRepository 中,因此无法记录作业停止和重新启动的状态。所以我还是需要回去使用StepExecution/JobExecution。我在网上找到的那些例子都是基于 XML 配置,或者是更糟糕的 SpEL Autowiring 到 setter 方法。

我纯粹使用 Java Config..是否有 Java 配置或面向 Java 代码的方式来访问 StepExecution?访问各种 ExecutionContext 的最佳实践是什么?

最佳答案

要访问 StepExecutionJobExecution,您的 ItemReaderItemProcessorItemWriter 必须实现 StepExecutionListener

例如:

public class MyCustomItemWriter implements ItemWriter<Object>, StepExecutionListener {

private StepExecution stepExecution;

@Override
public void beforeStep(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
return stepExecution.getExitStatus();
}

@Override
public void write(List<? extends Object> list) throws Exception {
if (null == list || list.isEmpty()) {
throw new Exception("Cannot write null or empty list");
}
ExecutionContext stepExecContext = this.stepExecution.getExecutionContext()
ExecutionContext jobExecContext = this.stepExecution.getJobExecution().getExecutionContext();
// TODO: Write your code here
}
}

关于java - 在 ItemReader/Processor/Writer 中访问 StepExecution/JobExecution 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34197606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com