我有一个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();
         }
      }

09-29 21:44