我有一个JobExecutionListener
,将执行后的作业状态写入日志文件。如何获得已处理的物品数?
@Component
public class JobListener implements JobExecutionListener {
@Override
public void afterJob(JobExecution task) {
log.info(task.getStatus());
//number of entries??
}
}
最佳答案
我看到两种方法。
您可以实现ItemProcessListener。在处理项目之前/之后调用此接口。该界面还报告了任何错误。
public class ItemCountsListener implements ItemProcessListener<Object, Object> {
private static final AtomicLong count = new AtomicLong(1);
public void afterProcess(Object item, Object result) {
count.getAndIncrement();
}
public void beforeProcess(Object item) {}
public void onProcessError(Object item, Exception e) { }
}
或者,您可以调用方法
jobExecution.getStepExecutions()
。此方法返回一个Collection<StepExecution>
对象。在此类中,有一个方法getWriteCount
返回为此执行写入的当前项目数。我会做类似下面的代码:
public void afterJob(JobExecution jobExecution) {
int nbItemsProcessed;
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
nbItemsProcessed += stepExecution.getWriteCount();
}
}