Журнал чтения, записи и количества ошибок с помощью пакета Spring - PullRequest
0 голосов
/ 03 августа 2020

У меня есть пакет Sprint с заданием

<batch:job id="data-send" parent="baseJob">
    <batch:listeners merge="true">
        <batch:listener ref="someJobExecutionListener"/>
    </batch:listeners>
    <batch:step id="data-send.step01">
        <batch:tasklet transaction-manager="jobTransactionManager" ref="dataSendTasklet"/>
    </batch:step>
</batch:job>

Псевдокод тасклета

@Component
public class DataSendTasklet implements Tasklet {
 
@Override
public RepeatStatus execute((final StepContribution contribution, final ChunkContext chunkContext) throws Exception {

   List<SomeObject> objectList = dbGetOperation();
   objectList.stream().forEach(o -> someDataSendOperation(o));
   log("ReadCount: "+objectList.size());
   return RepeatStatus.FINISHED;
}

В настоящее время я регистрирую счетчик чтения, вычисляя размер списка объектов и если Мне пришлось регистрировать обработанные записи и записи об ошибках, которые мне пришлось бы отслеживать переменную внутри метода someDataSendOperation. Есть ли какие-либо стандартные функции Spring для обработки счетчиков чтения, записи и ошибок в этом сценарии?

Ответы [ 2 ]

0 голосов
/ 14 августа 2020

Я не понимаю, почему вы используете простой тасклет вместо шага, ориентированного на фрагменты. Вы можете использовать ItemReader<SomeObject> и ItemWriter<SomeObject>, которые выполняют someDataSendOperation.

При этом вам не нужно самостоятельно перебирать список, и вы получите нужные значения.

0 голосов
/ 03 августа 2020

У меня был аналогичный вариант использования, я создал StepListener и распечатал всю полезную информацию. Вот пример:

public class StepExecuteListener extends StepExecutionListenerSupport {
private static final Logger LOG = LoggerFactory.getLogger(StepExecuteListener.class);

@Override
public void beforeStep(StepExecution stepExecution) {
    // No action needed
}

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    
    LOG.debug("StepExecutionListener - afterStep:getCommitCount= {}", stepExecution.getCommitCount());
    LOG.debug("StepExecutionListener - afterStep:getFilterCount= {}", stepExecution.getFilterCount());
    LOG.debug("StepExecutionListener - afterStep:getProcessSkipCount= {}", stepExecution.getProcessSkipCount());
    LOG.info("StepExecutionListener - afterStep:getReadCount= {}", stepExecution.getReadCount());
    LOG.debug("StepExecutionListener - afterStep:getReadSkipCount= {}", stepExecution.getReadSkipCount());
    LOG.debug("StepExecutionListener - afterStep:getRollbackCount= {}", stepExecution.getRollbackCount());
    LOG.info("StepExecutionListener - afterStep:getWriteCount= {}", stepExecution.getWriteCount());
    LOG.debug("StepExecutionListener - afterStep:getWriteSkipCount= {}", stepExecution.getWriteSkipCount());
    LOG.debug("StepExecutionListener - afterStep:getStepName= {}", stepExecution.getStepName());
    LOG.debug("StepExecutionListener - afterStep:getSummary= {}", stepExecution.getSummary());
    LOG.debug("StepExecutionListener - afterStep:getStartTime= {}", stepExecution.getStartTime());
    LOG.debug("StepExecutionListener - afterStep:getStartTime= {}", stepExecution.getEndTime());
    LOG.debug("StepExecutionListener - afterStep:getLastUpdated= {}", stepExecution.getLastUpdated());
    LOG.debug("StepExecutionListener - afterStep:getExitStatus= {}", stepExecution.getExitStatus());
    LOG.debug("StepExecutionListener - afterStep:getFailureExceptions= {}", stepExecution.getFailureExceptions());
   
    
    return null;
}
   }
...