Spring 所有作业结束时电子邮件摘要的春季批处理问题

Spring 所有作业结束时电子邮件摘要的春季批处理问题,spring,spring-batch,Spring,Spring Batch,我们有大约20个不同的Spring批处理作业(一些作为微服务运行,一些集中在一个Spring Boot应用程序中)。我需要做的是收集所有作业遇到的所有错误,以及处理的记录数,并在电子邮件中汇总 我首先实现了ItemListenerSupport: public class BatchItemListener extends ItemListenerSupport<BaseDomainDataObject, BaseDomainDataObject> { private fin

我们有大约20个不同的Spring批处理作业(一些作为微服务运行,一些集中在一个Spring Boot应用程序中)。我需要做的是收集所有作业遇到的所有错误,以及处理的记录数,并在电子邮件中汇总

我首先实现了
ItemListenerSupport

public class BatchItemListener extends ItemListenerSupport<BaseDomainDataObject, BaseDomainDataObject> {
    private final static Log logger = LogFactory.getLog(BatchItemListener.class);
    private final static Map<String, Integer> numProcessedMap = new HashMap<>();
    private final static Map<String, Integer> errorMap = new HashMap<>();

    @Override
    public void onReadError(Exception ex) {
        logger.error("Encountered error on read", ex);
    }

    @Override
    public void onProcessError(BaseDomainDataObject item, Exception ex) {
        String msgBody = ExceptionUtils.getStackTrace(ex);
        errorMap.put(item, msgBody);
    }

    @Override
    public void onWriteError(Exception ex, List<? extends BaseDomainDataObject> items) {
        logger.error("Encountered error on write", ex);
        numProcessedMap.computeIfAbsent("numErrors", val -> items.size());
    }

    @Override
    public void afterWrite(List<? extends BaseDomainDataObject> items) {
        logger.info("Logging successful number of items written...");
        numProcessedMap.computeIfAbsent("numSuccess", val -> items.size());
    }
}
公共类BatchItemListener扩展了ItemListener支持{
私有最终静态日志记录器=LogFactory.getLog(BatchItemListener.class);
private final static Map numProcessedMap=new HashMap();
private final static Map errorMap=new HashMap();
@凌驾
public void onReadError(异常示例){
logger.error(“读取时遇到错误”,例如);
}
@凌驾
public void onProcessError(BaseDomainDataObject项,异常示例){
字符串msgBody=ExceptionUtils.getStackTrace(ex);
errorMap.put(项目,msgBody);
}
@凌驾

public void onWriteError(例外示例,ListSpring批处理不提供编排作业的方法。最接近的方法是使用“master”具有委托给子作业类型的多个步骤的作业。使用此方法,您可以在主作业上配置的
JobExecutionListener#afterJob
中进行聚合

否则,您可以创建一个包含所有工作的列表